Huxi Asked: 2009-07-14 12:54:44 +0800 CST2009-07-14 12:54:44 +0800 CST 2009-07-14 12:54:44 +0800 CST 如何在 Mac OS X 上的 shell 脚本中检索绝对文件名? 772 我想检索当前执行的脚本文件的绝对文件名。链接也应该解决。 在 Linux 上,这似乎是这样完成的: $(readlink -mn "$0") 但readlink似乎在 Mac OS X 上的工作方式非常不同。 我读过这是使用 $(realpath $0) 在 BSD 中,但这也不起作用。Mac OS X 没有realpath. 任何想法? mac-osx bash shell 4 个回答 Voted jhclark 2012-07-11T04:35:03+08:002012-07-11T04:35:03+08:00 #!/usr/bin/env bash scriptDir="$(cd "$(dirname "$0")" && pwd -P)" Best Answer ericslaw 2009-07-14T13:09:03+08:002009-07-14T13:09:03+08:00 我作弊并使用 perl 来做这件事: #!/bin/bash dirname=`perl -e 'use Cwd "abs_path";print abs_path(shift)' $0` echo $dirname 你会认为我只是用 perl 编写整个脚本,我经常这样做,但并非总是如此。 FMc 2019-05-22T15:52:30+08:002019-05-22T15:52:30+08:00 另一种方法: # Install. brew install coreutils # Use the GNU variant. grealpath --help Oliver 2018-11-29T13:24:06+08:002018-11-29T13:24:06+08:00 这处理符号链接的组合,它适用于文件和文件夹: #!/usr/bin/env bash realpath() { if ! pushd $1 &> /dev/null; then pushd ${1##*/} &> /dev/null echo $( pwd -P )/${1%/*} else pwd -P fi popd > /dev/null } 但它不支持 realpath 的 --relative-to。这将需要 此处描述的转换。
我作弊并使用 perl 来做这件事:
你会认为我只是用 perl 编写整个脚本,我经常这样做,但并非总是如此。
另一种方法:
这处理符号链接的组合,它适用于文件和文件夹:
但它不支持 realpath 的 --relative-to。这将需要 此处描述的转换。