如何在 Mac OS X 上的 shell 脚本中检索绝对文件名?

Hux*_*uxi 22 shell bash mac-osx

我想检索当前执行的脚本文件的绝对文件名。链接也应该解决。

在 Linux 上,这似乎是这样完成的:

$(readlink -mn "$0")
Run Code Online (Sandbox Code Playgroud)

readlink似乎工作非常不同的Mac OS X上

我读过这是使用

$(realpath $0)
Run Code Online (Sandbox Code Playgroud)

在 BSD 中,但这也不起作用。Mac OS X 没有realpath.

任何的想法?

小智 29

#!/usr/bin/env bash
scriptDir="$(cd "$(dirname "$0")" && pwd -P)"
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于符号链接目录中的文件,一般不适用于符号链接文件 (3认同)

eri*_*law 22

我作弊并使用 perl 来做这件事:

#!/bin/bash
dirname=`perl -e 'use Cwd "abs_path";print abs_path(shift)' $0`
echo $dirname
Run Code Online (Sandbox Code Playgroud)

你会认为我只是用 perl 编写整个脚本,我经常这样做,但并非总是如此。