从哪里运行 shell 脚本?

Ion*_*zău 5 linux shell bash directory

我在/usr/bin. 让我们称之为hello

它包含以下内容:

 echo "I am located in $PWD"
 echo "I am called from this directory: ???"
Run Code Online (Sandbox Code Playgroud)

hello/home/Documents我期望以下输出运行:

 echo "I am located in $PWD"
 echo "I am called from this directory: ???"
Run Code Online (Sandbox Code Playgroud)

如何获取运行脚本的目录路径?

ori*_*ion 8

无法评论另一个答案,所以我在这里发帖。如上所述,dirname只是读取$0并获取目录名称,因此如果您调用类似的东西,../../directory/something.sh它不会解析这些点,而只会返回../../directory. 您可以使用一个非常智能的命令,而不是使用cd和使用子shell 扩展pwd,它不仅可以readlink解析点目录,还可以解析所有符号链接。因此我建议

  echo "I am located at $(readlink -e -- "$0")"
Run Code Online (Sandbox Code Playgroud)

您可以使用另一个dirname来获取目录而不是文件。


Ion*_*zău 6

$PWD是包含当前目录的变量。$(dirname -- "$0")可以使用shell脚本来获取目录。

脚本的内容将如下所示:

echo "I am located in $(dirname -- "$0")"
echo "I am called from this directory: $PWD"
Run Code Online (Sandbox Code Playgroud)

  • 第一行的另一种方式(这样“./something”不会只输出“.”...):`echo“我位于 $(cd "$(dirname "$0")" && pwd)"` (别担心, $(...) 将在子shell中运行它,所以 cd 只出现在那个子shell中,不会影响脚本的其余部分,因此第二行仍然有效) (2认同)