带有 shell 脚本的 pwd 命令

Aru*_*ith 4 shell

我正在调用一个脚本如下


目录路径:/user/local/script/print_path.sh

var_path=`pwd`
echo $var_path
Run Code Online (Sandbox Code Playgroud)

上面的脚本调用如下目录路径:/user/local/callPscript/call.sh

`/user/local/script/print_path.sh`
Run Code Online (Sandbox Code Playgroud)

我想要的输出如下:

/user/local/script/
Run Code Online (Sandbox Code Playgroud)

但它给出了输出:

/user/local/callPscript/
Run Code Online (Sandbox Code Playgroud)

即调用脚本的位置。如何使其进入脚本主目录路径?

l0b*_*0b0 6

经过几周的 Bash 编程,这已经成为标准解决方案:

directory=$(dirname -- $(readlink -fn -- "$0"))
Run Code Online (Sandbox Code Playgroud)

$0是脚本的相对路径,readlink -f将其解析为绝对路径,并dirname从路径末尾去除脚本文件名。

基于完全安全 find 的更安全变体:

directoryx="$(dirname -- $(readlink -fn -- "$0"; echo x))"
directory="${directoryx%x}"
Run Code Online (Sandbox Code Playgroud)

这对于任何文件名都应该是安全的 -$()结构删除字符串末尾的换行符,这就是x末尾的原因。


Dar*_*ust 0

试试这个,它应该接近你想要的:

var_path=`dirname "$0"`
Run Code Online (Sandbox Code Playgroud)