我正在调用下面的脚本
目录路径:/user/local/script/print_path.sh
var_path=`pwd`
echo $var_path
上面的脚本调用如下 目录路径:/user/local/callPscript/call.sh
`/user/local/script/print_path.sh`
我希望输出如下:
/user/local/script/
但它给出了输出:
/user/local/callPscript/
即。调用脚本的位置。如何将其转到脚本主目录路径?
答案 0 :(得分:3)
经过几周的Bash编程,这已成为标准解决方案:
directory=$(dirname -- $(readlink -fn -- "$0"))
$0
是脚本的相对路径,readlink -f
将其解析为绝对路径,dirname
从路径末尾删除脚本文件名。
directoryx="$(dirname -- $(readlink -fn -- "$0"; echo x))"
directory="${directoryx%x}"
使用任何文件名都应该是安全的 - $()
结构会删除字符串末尾的换行符,这就是x
结尾的原因。
答案 1 :(得分:1)
可能这可以帮到你。
var_path=$PWD
echo $var_path
答案 2 :(得分:0)
试试这个,它应该接近你想要的东西:
var_path=`dirname "$0"`
答案 3 :(得分:0)
请参阅BashFAQ/028。
此主题经常出现。这个答案不仅包括上面使用的表达式(“配置文件”),还包括几种变体情况。如果你被引导到这里,请在解雇之前阅读整个答案。
这是一个复杂的问题,因为没有一个正确的答案。更糟糕的是:在100%的情况下都无法可靠地找到位置。查找脚本位置的所有方法都取决于脚本的名称,如预定义变量$ 0中所示。但是在$ 0中提供脚本名称只是一种(非常常见的)约定,而不是要求。
。 。
通常,将数据文件存储在与程序相同的目录中是一种不好的做法。 Unix文件系统布局假定一个地方的文件(例如/ bin)是可执行程序,而另一个地方的文件(例如/ etc)是数据文件。
阅读完整页面以获取更多有用的信息。