【问题标题】:"No such file or directory" while in link path在链接路径中“没有这样的文件或目录”
【发布时间】:2019-07-26 18:07:45
【问题描述】:

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

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

因为我有足够的内存,所以目标是在 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 找不到!

【问题讨论】:

  • 你能试试cd ./build; echo $PWD吗?当它 try=ies 执行 ../configure 时,这会告诉你你在哪里
  • 你没有设置$XDG_RUNTIME_DIR。它是否在脚本的父环境中导出?如果是,declare -p XDG_RUNTIME_DIR 应该在其输出中包含 -x
  • @kkawabat cd ./build; echo $PWD 返回/home/gareth-anthony-hulse/Projects/prog/cpp-vulkan-triangle/build
  • @dennis-williamson $XDG_RUNTIME_DIR 默认为 /run/user/$UID。在我的情况下,$UID 返回1000
  • 对不起,我的意思是之前。没有cd.. 命令。

标签: linux bash ln


【解决方案1】:

我把脚本改成了这样:

#!/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)/configure; make。但是,这会导致 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'

【讨论】:

  • 字面意思是'$my_project_src_dir',因为它是单引号。将它们切换为双引号将允许扩展变量。您可以 source 它(. scriptnamesource scriptname)而不是运行您的脚本,并且您的变量将在您当前的环境中可用,允许您使用 cd ./build; "$my_project_src_dir/configure"; makecd "$my_project_src_dir"; ./bootstrap 这可能允许选项卡完成工作(尽管您可能需要省略引号)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 2021-01-12
  • 2016-03-21
  • 2022-01-06
相关资源
最近更新 更多