Bash
如何修改腳本以在比較時不列印路徑?
cd /tmp if [[ $(echo "`pwd`" | awk -F '/' '{print $NF}') == "tmp" ]]; then echo "YES" else echo "NO" fi cd -
是的,列印如下:
YES /tmp
但我只想
YES
列印路徑的是最後的
cd -
命令。它列印路徑,以便您可以看到最終進入的工作目錄。這是使用操作數(單個破折號)cd
呼叫時的特殊行為,在這種情況下,它等效於-
cd "$OLDPWD" && pwd
為避免這種情況,您可以
cd "$OLDPWD"
改用 (OLDPWD
是一個保存前一個工作目錄值的特殊變數),但請注意,如果cd /tmp
失敗並且您的程式碼輸出NO
,那麼兩者都cd -
可能cd "$OLDPWD"
會將您帶到一個意外的目錄。相反,使用
( cd /tmp if [[ $(echo "`pwd`" | awk -F '/' '{print $NF}') == "tmp" ]]; then echo YES else echo NO fi )
第一個
cd
不會影響(...)
子shell 之外的工作目錄。此外,您的測試將更安全有效地執行
if [[ $PWD == */tmp ]]; then echo YES else echo NO fi
該
PWD
變數將包含目前工作目錄的路徑名,並且通常是您想要使用的,而不是pwd
命令。該測試只是測試目前工作目錄的路徑名是否以 string 結尾/tmp
,這也是您的awk
程式碼似乎也想做的事情(但如果路徑名包含換行符,則會失敗)。如果您只想檢查是否可以
cd
進入/tmp
,但實際上不這樣做,請使用( if cd /tmp; then echo YES; else echo NO; fi )
在具有外部
cd
實用程序的系統上,例如 macOS 和 Solaris,您可以像這樣使用它:if /usr/bin/cd /tmp; then echo YES else echo NO fi
外部
cd
實用程序實際上永遠不能用於更改工作目錄,但它仍然可以在諸如確定是否可以更改到特定目錄的測試中有用。另請參閱cd
外部命令的意義何在?如果您要做的是測試是否
/tmp
存在並且是目錄(或目錄的符號連結),那麼最常見的方法不是使用測試,cd
而是使用如下測試:if [ -d /tmp ]; then echo YES else echo NO fi