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

Jul*_*ANT 5 shell

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

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

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

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

Mic*_*rny 6

#!/bin/sh\n\nself=$(\n    self=${0}\n    while [ -L "${self}" ]\n    do\n        cd "${self%/*}"\n        self=$(readlink "${self}")\n    done\n    cd "${self%/*}"\n    echo "$(pwd -P)/${self##*/}"\n)\n\necho "${self}"\n
Run Code Online (Sandbox Code Playgroud)\n\n

它\xc2\x几乎是便携式的\xc2\xbb。模式替换pwd -P是POSIX,而后者通常是shell内置的。readlink很常见,但 POSIX 中没有。

\n\n

我认为没有一种更简单且便携的方式。如果您确实需要类似的东西,我建议您尝试在所有系统上安装realpath 。

\n


Ste*_*las 1

对于 zsh 脚本,FWIW:

#! /bin/zsh -
fullpath=$0:A
Run Code Online (Sandbox Code Playgroud)