带有shell脚本的pwd命令

时间:2011-03-10 07:46:47

标签: shell

我正在调用下面的脚本


目录路径:/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/

即。调用脚本的位置。如何将其转到脚本主目录路径?

4 个答案:

答案 0 :(得分:3)

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

directory=$(dirname -- $(readlink -fn -- "$0"))

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

基于completely safe find

的更安全的变体
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)是数据文件。

阅读完整页面以获取更多有用的信息。