題 為什麼.sh文件中的“cd - ”會打印地址


我使用“cd - ”在文件夾之間切換。 喜歡:

cd /etc/                                                                                                                          
cd -   

但為什麼“cd - ”會打印地址(如pwd)? 如何阻止它打印地址?


4
2018-01-19 05:16


起源




答案:


SUS4說

當 - 用作操作數時,這應該等同於命令:

    cd "$OLDPWD" && pwd

它將更改為上一個工作目錄,然後寫入其名稱。

所以,如果你不想打印一半的行為,那就自己做第一點了:

cd "$OLDPWD"

或波浪擴展等效

cd ~-

通常,如果你需要這個, pushd / popd 是一個更好的便攜式選擇。


13
2018-01-19 05:26



+1,不知道為什麼這個被低估了,因為它肯定會解釋 為什麼 它做它做的事。添加顯示如何修復它的位。
不知道。還補充說 ~-, pushd, popd - ormaaj


只需將標準輸出重定向到黑洞即可

cd - > /dev/null

1
2018-01-19 05:18



我不喜歡這個,因為它確實是雙重工作:首先是一個 pwd 這是重定向到 /dev/null。為什麼不使用 cd $OLDPWD 正如ormaaj建議的那樣? - Andreas Florath
因為打字更多?它使用了一些“神奇”的環境變量?當然, cd - 也有點神奇,但至少它更容易記住。 - JvO
這種方法很好。它不是“雙重工作”,它只是隱藏輸出(shell實際上不必執行運行兩個命令所需的所有步驟)。如果使用,您還必須以類似的方式隱藏輸出 pushd/popd 在腳本中。 - ormaaj


最簡單的方法是不使用它。在單獨的shell中運行命令:

(cd /etc/; ... )

這不會更改'main'shell的當前工作目錄。這通常比使用更健壯 OLDPWD 因為你可以擁有很多 cd 這裡的命令就像

(cd /etc; ... ; cd /tmp; ... )

0
2018-01-19 10:05



這有不同的語義(特別是如果 ... 改變環境)並創建一個額外的過程。 - Mat
不同的語義到底是什麼?恕我直言,這是完全不清楚,之間發生了什麼 cd /etc 和 cd -。如果有環境變化,那你就完全正確了。如果有額外的 cd也許這是更好的方式。 - Andreas Florath
我的意思是 (cd /etc; FOO=bar) 和 cd /etc; FOO=bar; cd -; 不要做同樣的事情。 - Mat