我有一个Bash脚本需要知道它的完整路径.我试图找到一种广泛兼容的方式来做到这一点,而不会结束相对或时髦的路径.我只需要支持Bash,而不是sh,csh等.
到目前为止我发现了什么:
从地址中获取Bash脚本的源目录的接受答案是获取脚本的路径dirname $0,这很好,但可能会返回相对路径(如.),如果要更改目录中的目录,这是一个问题脚本并使路径仍指向脚本的目录.不过,dirname将成为这个难题的一部分.
对OS X的Bash脚本绝对路径 的接受答案(特定于OS X,但答案无论如何)都会给出一个函数,该函数将测试是否$0看起来相对,如果是,则会预先挂起$PWD.但是结果仍然可以包含相对位(虽然总体来说它是绝对的) - 例如,如果脚本t在目录中/usr/bin并且你进入/usr并且你输入bin/../bin/t它来运行它(是的,那是复杂的),你最终会得到/usr/bin/../binas脚本的目录路径.哪个有效,但......
此页面上的readlink解决方案如下所示:
# Absolute path to this script. /home/user/bin/foo.sh
SCRIPT=$(readlink -f $0)
# Absolute path this script is in. /home/user/bin
SCRIPTPATH=`dirname $SCRIPT`
但是readlink不是POSIX,显然解决方案依赖于GNU readlink,其中BSD由于某种原因无法工作(我无法访问类似BSD的系统进行检查).
所以,各种方式,但他们都有他们的警告.
什么是更好的方式?"更好"的意思是:
Mercurial有一种打印根目录(包含.hg)的方法
hg root
在git中是否有类似的东西来获取包含.git目录的目录?