Bash脚本绝对路径与OSX

我正在尝试获取OS X上当前正在运行的脚本的绝对路径。

我看到很多回复为readlink -f $0 。 但是,由于OS X的readlink与BSD相同,因此它不起作用(它与GNU版本一起使用)。

任何建议的开箱即用解决方案?


有一个realpath() C函数可以完成这项工作,但我在命令行上没有看到任何可用的东西。 这是一个快速而肮脏的替代品:

#!/bin/bash

realpath() {
    [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}

realpath "$0"

如果以/开头,则会逐字打印路径。 如果不是,它必须是相对路径,所以它将$PWD放在前面。 #./零件从$1的前面./


这三个简单的步骤将解决这个问题和许多其他OSX问题:

  • 安装Homebrew
  • brew install coreutils
  • grealpath .
  • (3)可能改变为实际realpath ,参见(2)输出


    啊。 我发现以前的答案有点想要,原因有几个:特别是,它们不能解决多层次的符号链接,而且它们非常“Bash-y”。 尽管原始问题明确要求提供“Bash脚本”,但它也提及了Mac OS X的类似BSD的非GNU readlink 。 所以这里是一个合理的可移植性的尝试(我用bash检查它为'sh'和破折号),解决任意数量的符号链接; 它也应该与路径中的空白一起工作,尽管我不确定如果空白是实用程序本身的基本名称的行为,那么也许,呃避免这种情况?

    #!/bin/sh
    realpath() {
      OURPWD=$PWD
      cd "$(dirname "$1")"
      LINK=$(readlink "$(basename "$1")")
      while [ "$LINK" ]; do
        cd "$(dirname "$LINK")"
        LINK=$(readlink "$(basename "$1")")
      done
      REALPATH="$PWD/$(basename "$1")"
      cd "$OURPWD"
      echo "$REALPATH"
    }
    realpath "$@"
    

    希望可以对某人有用。

    链接地址: http://www.djcxy.com/p/1667.html

    上一篇: Bash script absolute path with OSX

    下一篇: How to set current working directory to the directory of the script?