5

我正在寻找一个简单的解决方案来检索当前脚本的绝对路径。它需要独立于平台(我希望它可以在 linux、freebsd、macos 上工作并且没有 bash)。

  • “readlink -f $0”适用于 linux,但不适用于 freebsd 和 macos:readlink 没有“-f”选项。
  • “realpath $0”适用于 freebsd 和 linux,但不适用于 macos:我没有这个命令。

编辑:检索脚本存储库路径的解决方案:

DIR="$( cd "$( dirname "$0" )" && pwd )" (来源:从内部获取 Bash 脚本的源目录

4

2 回答 2

4
#!/bin/sh

self=$(
    self=${0}
    while [ -L "${self}" ]
    do
        cd "${self%/*}"
        self=$(readlink "${self}")
    done
    cd "${self%/*}"
    echo "$(pwd -P)/${self##*/}"
)

echo "${self}"

它“主要是便携式的”。模式替换pwd -P是 POSIX,后者通常是内置的 shell。readlink很常见,但不在 POSIX 中。

而且我认为没有更简单的便携式方式。如果您真的需要这样的东西,我建议您尝试在所有系统上安装realpath 。

于 2012-08-27T16:02:37.410 回答
1

对于 zsh 脚本,FWIW:

#! /bin/zsh -
fullpath=$0:A
于 2012-08-27T15:37:10.027 回答