如何简单地检索当前脚本的绝对路径(多OS解决方案)?

时间:2012-05-02 10:45:13

标签: shell

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

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

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

DIR =“$(cd”$(dirname“$ 0”)“&& pwd)”(来源:Getting the source directory of a Bash script from within

2 个答案:

答案 0 :(得分:1)

对于zsh脚本,FWIW:

#! /bin/zsh -
fullpath=$0:A

答案 1 :(得分:0)

#!/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