相关疑难解决方法(0)

Bash脚本获取自身完整路径的可靠方法

我有一个Bash脚本需要知道它的完整路径.我试图找到一种广泛兼容的方式来做到这一点,而不会结束相对或时髦的路径.我只需要支持Bash,而不是sh,csh等.

到目前为止我发现了什么:

  1. 地址中获取Bash脚本的源目录的接受答案是获取脚本的路径dirname $0,这很好,但可能会返回相对路径(如.),如果要更改目录中的目录,这是一个问题脚本并使路径仍指向脚本的目录.不过,dirname将成为这个难题的一部分.

  2. OS X的Bash脚本绝对路径 的接受答案(特定于OS X,但答案无论如何)都会给出一个函数,该函数将测试是否$0看起来相对,如果是,则会预先挂起$PWD.但是结果仍然可以包含相对位(虽然总体来说它是绝对的) - 例如,如果脚本t在目录中/usr/bin并且你进入/usr并且你输入bin/../bin/t它来运行它(是的,那是复杂的),你最终会得到/usr/bin/../binas脚本的目录路径.哪个有效,但......

  3. 此页面上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`
    
    Run Code Online (Sandbox Code Playgroud)

    但是readlink不是POSIX,显然解决方案依赖于GNU readlink,其中BSD由于某种原因无法工作(我无法访问类似BSD的系统进行检查).

所以,各种方式,但他们都有他们的警告.

什么是更好的方式?"更好"的意思是:

  • 给了我绝对的道路.
  • 即使以复杂的方式调用,也可以获得时髦的位(参见上面#2的评论).(例如,至少要对路径进行适度规范化.)
  • 仅依赖于Bash-isms或几乎肯定会出现在最流行的*nix系统(GNU/Linux,BSD和类似BSD的系统,如OS X等)上的东西.
  • 如果可能,避免调用外部程序(例如,更喜欢Bash内置程序). …

bash path

653
推荐指数
12
解决办法
42万
查看次数

有没有办法在一个命令中获取git根目录?

Mercurial有一种打印根目录(包含.hg)的方法

hg root
Run Code Online (Sandbox Code Playgroud)

在git中是否有类似的东西来获取包含.git目录的目录?

git version-control

613
推荐指数
18
解决办法
18万
查看次数

标签 统计

bash ×1

git ×1

path ×1

version-control ×1