
這是我的文件的一部分.bashrc
:
echo_pwd () {
echo `pwd`
}
export echo_pwd="`echo_pwd`/"
我創建了一個新函數echo_pwd
,用於列印當前目錄的路徑和一個新環境變量,其中包含當前目錄,後跟斜線。因此,我可以在命令列中使用我的環境變數(例如$PWD
)。
但是,此環境變數無法正確擴展,並且始終引用我的主目錄:
~/Documents$ env | grep echo_pwd
echo_pwd=/home/pierre/
~/Documents$
我該怎麼做才能讓我的環境變數正確擴展?
注意:這顯然是一個虛擬範例。在我的具體用例中,這echo_pwd
是一個更複雜的函數。
答案1
您可能只執行該函數並設定變數的值一次。
要在使用時自動更新變數的值cd
,您可以覆寫 shell 的內建函數,cd
如下所示:
cd () {
builtin cd "$@"
echo_pwd=$( echo_pwd )/
}
cd
這將使用您為函數提供的任何參數來呼叫內建函數cd
,然後更新變數的值(請注意,export
如果您已經將其匯出到其他地方,或者根本需要匯出,則不需要)。
完整的設定可能看起來像
echo_pwd () {
printf '%s\n' "$PWD" # or just: pwd
}
export echo_pwd="$( echo_pwd )/"
cd () {
builtin cd "$@"
echo_pwd=$( echo_pwd )/
}
我選擇了使用printf
而$PWD
不是調用該pwd
實用程序,我也是用於$(...)
命令替換。
答案2
在 中export echo_pwd="`echo_pwd`/"
,命令替換僅在設定變數時執行一次。
如果需要更新變數的值,則需要再次設定它。
在互動式 bash 中,您可以使用PROMPT_COMMAND
,每次列印提示時都會執行:
$ PROMPT_COMMAND='echo_pwd="`echo_pwd`/"'
$ cd bar/
$ echo $echo_pwd/
/tmp/foo/bar//
$ cd baz
$ echo $echo_pwd
/tmp/foo/bar/baz/