我想检索当前执行的脚本文件的绝对文件名。链接也应该被解析。
在 Linux 上,这似乎是像这样完成的:
$(readlink -mn "$0")
但readlink
似乎有效非常在 Mac OS X 上则有所不同。
我读到过这是使用
$(realpath $0)
在 BSD 中,但这也不起作用。Mac OS X 没有realpath
。
任何想法?
答案1
我作弊并使用 perl 来做这件事:
#!/bin/bash
dirname=`perl -e 'use Cwd "abs_path";print abs_path(shift)' $0`
echo $dirname
您可能认为我会用 perl 编写整个脚本,而且我经常这样做,但并非总是如此。
答案2
#!/usr/bin/env bash
scriptDir="$(cd "$(dirname "$0")" && pwd -P)"
答案3
它处理符号链接的组合,并且适用于文件和文件夹:
#!/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。这需要转换 描述在这里。
答案4
另一种方法:
# Install.
brew install coreutils
# Use the GNU variant.
grealpath --help