3 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個(gè)贊
嘗試以下簡(jiǎn)單的一線:
對(duì)于所有UNIX / OSX / Linux
dir=$(cd -P -- "$(dirname -- "$0")" && pwd -P)
重?fù)?/p>
dir=$(cd -P -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)
注意:命令中使用雙破折號(hào)(-)表示命令選項(xiàng)的結(jié)尾,因此包含破折號(hào)或其他特殊字符的文件不會(huì)破壞命令。
注意:在Bash中,請(qǐng)使用${BASH_SOURCE[0]},以代替,$0否則在采購(gòu)(source/ .)時(shí)路徑可能會(huì)中斷。
對(duì)于Linux,Mac和其他* BSD:
cd "$(dirname "$(realpath "$0")")";
注意:realpath默認(rèn)情況下,應(yīng)將其安裝在最受歡迎的Linux發(fā)行版中(例如Ubuntu),但是某些情況下可能會(huì)丟失,因此必須進(jìn)行安裝。
注意:如果您使用的是Bash,請(qǐng)使用${BASH_SOURCE[0]}代替$0,否則在采購(gòu)(source/ .)時(shí)路徑可能會(huì)中斷。
否則,您可以嘗試類(lèi)似的方法(它將使用第一個(gè)現(xiàn)有工具):
cd "$(dirname "$(readlink -f "$0" || realpath "$0")")"
對(duì)于特定于Linux的:
cd "$(dirname "$(readlink -f "$0")")"
在* BSD / Mac上使用GNU readlink:
cd "$(dirname "$(greadlink -f "$0")")"
注意:您需要先coreutils安裝(例如1.安裝Homebrew和2. brew install coreutils)。
重?fù)?/p>
在bash中,您可以使用Parameter Expansions來(lái)實(shí)現(xiàn),例如:
cd "${0%/*}"
但是如果腳本是從同一目錄運(yùn)行的,則無(wú)法使用。
另外,您可以在bash中定義以下函數(shù):
realpath () {
[[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}
此函數(shù)有1個(gè)參數(shù)。如果參數(shù)已經(jīng)具有絕對(duì)路徑,則按原樣打印,否則打印$PWD變量+文件名參數(shù)(不帶./前綴)。
或以下是從Debian .bashrc文件中獲取的版本:
function realpath()
{
f=$@
if [ -d "$f" ]; then
base=""
dir="$f"
else
base="/$(basename "$f")"
dir=$(dirname "$f")
fi
dir=$(cd "$dir" && /bin/pwd)
echo "$dir$base"
}
添加回答
舉報(bào)