我想檢索目前執行的腳本文件的絕對檔名。鏈接也應該解決。
在 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