linux - "No such file or directory"在链接路径中

标签 linux bash ln

编译时,我总是将构建放在一个单独的目录中。例如:

mkdir build
cd ./build
(cd ..; ./bootstrap)
../configure
make

因为我有足够的 RAM,所以我的目标是在 TMPFS 上编译。

脚本获取项目的名称,将其用作在 $XDG_RUNTIME_DIR/build 中创建的目录的名称,最后链接它。

# setup-build.sh

#!/usr/bin/bash
set -e

my_project_name=$(basename $(pwd))
my_project_build_dir="$XDG_RUNTIME_DIR/build/$my_project_name"
mkdir -p $my_project_build_dir
ln -s "$my_project_build_dir" "$(pwd)/build"

脚本运行没有问题。但是,当我执行 cd ./build; 时../configure 它返回一个错误:bash: ../configure: No such file or directory。该文件肯定存在,但 Bash 找不到它!

最佳答案

我将脚本修改为:

#!/usr/bin/bash
set -e

my_project_src_dir="$(pwd)"
my_project_name="$(basename $(pwd))"
my_project_build_dir="$XDG_RUNTIME_DIR/build/$my_project_name"
mkdir -p "$my_project_build_dir"
ln -s "$my_project_build_dir" "$(pwd)/build"
cd "$my_project_build_dir"
echo "$my_project_src_dir" > "./project-src-dir.txt"

要编译我必须输入cd ./build; $(cat ./project-src-dir.txt)/配置;制作。不过,这会导致 Bash 完全中断或部分中断。正如我无法使用此方法从 $my_project_src_dir 中 TAB 完整文件名一样,但参数的 TAB 完成工作正常。如果需要autoconf:(cd $(cat ./project-src-dir.txt); ./bootstrap)。如果有人有任何其他想法,我仍然希望能够只执行 ../configure,尽管现在必须这样做。

编辑:必须将 my_project_name="$(basename '$my_project_src_dir') 更改为 my_project_name="$(basename $(pwd))" 因为它从字面上理解了 '$my_project_src_dir'

关于linux - "No such file or directory"在链接路径中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57225105/

相关文章:

linux - X11 和远程 DISPLAY 的问题 - 我的世界什么时候改变了?

linux - 使用 bash 合并目录和加入内部文件

regex - 在 bash 中选择字符串中的所有单词对

c - 这是一个动态库链接器问题

linux - 中断处理(Linux/通用)

linux - 如何从 bz2 存档中获取文件列表(ls 命令)?

bash - 将两个空行合并为一个

linux - 'ln' 或 'ln -s' 的用法或应用场景是什么?

带通配符 (*) 的 Dockerfile 符号链接(symbolic link)不起作用

linux - ln 在使用通配符时出现意外行为