cd 指令 Linux 和神秘標誌

cd 指令 Linux 和神秘標誌

平台:CentOS 6.2外殼:tcsh

我正在玩cd一個 BASH 腳本,並注意到了奇妙的事情cd -選項,但留下了很多疑問......

  1. 為什麼cd -?這不是多餘的嗎cd ..

    編輯
    [正如 FatalError 指出的,這兩個命令不做同樣的事情......所以答案是“否”]

  2. -你能像瀏覽器中的 la 一樣 進一步深入研究你的 flag 歷史嗎?

    例如,當我輸入 時cd -,它會將我帶到以前的目錄,但是如果我再次輸入該命令,它會將我帶到剛剛來自的目錄,從而創建循環。

    是否支援傳回多個層級的簡寫?

    編輯
    我意識到我可以用 回去cd ..,但希望這可以成為通往不那麼冗長的深層的門戶,例如cd -3vs. cd ../../../...希望這能澄清我要問的內容......

    編輯2
    至於目前的回饋, while..是一個特殊目錄,我看不出為什麼內建cd的終端不能使用例如的簡寫../../ ... ../cd ..5為什麼內建也不能有歷史記錄(a la auto pushd/ popd) 可以像 一樣開啟和使用cd -3。我知道這可能存在一定的安全/隱私風險,但我不認為這比儲存命令歷史記錄更糟糕,大多數 shell/終端都是這樣做的。

  3. 的線上幫助頁cd可通過man cd和存取help cd(這對於任一命令都是相同的),僅列出-L-P標誌。

    但是,當我輸入時,cd --help它會輸出Usage: cd [-plvn][-|<dir>]..

    我是否正確地假設其他標誌和 - (後)選項是非標準的?

  4. -n和標誌有什麼-v用?

    兩者似乎都帶我回到我的主目錄,這就是我透過實驗所能弄清楚的。

快速閱讀網路資源[1][2]提供的資訊與手冊頁相同,但沒有回答我的問題。

注意:上面聲稱的第二個以 Linux 為中心的資源cd只有兩個選項(在當前版本中顯然不正確CentOS),因此我假設此功能可能是非標準的。

答案1

  1. cd -不等於cd ..。該cd -命令轉到以前的例如,如果您目前所在的目錄/home/bob然後運行cd /var/log,則運行cd -會將您帶回/home/bobcd ..另一方面,總是轉到父目錄。
  2. 如果你想保留這樣的歷史記錄,我建議你查看一下pushdpopd它可以讓你使用「目錄堆疊」:

    user@host:/etc/init.d$ pushd /var/log
    /var/log /etc/init.d
    user@host:/var/log$ pushd /tmp
    /tmp /var/log /etc/init.d
    user@host:/tmp$ popd
    /var/log /etc/init.d
    user@host:/var/log$ popd
    /etc/init.d
    

    至於在目錄樹中後退多個級別,據我所知,沒有通用的方法。..不是 shell 的一個功能,它實際上是 *nix 中引用父目錄的特殊目錄連結。

  3. cd是一個內建命令,因此它的標誌和用法可能會因 shell 而異。但是,一般來說,一個系統上的選項cd應該bash與另一個系統上的選項相同。

  4. 我的bashshell 沒有列出這些標誌中的任何一個...您是否正在嘗試使用bashor tcsh?如果你正在使用,tcsh你本質上是在使用一個完全不同的命令,所以你可能想在那裡運行bash並搞亂cd

編輯:

根據tcsh手冊頁:

使用 -p,列印最終的目錄堆棧,就像 dirs 一樣。 -l、-n 和 -v 標誌對 cd 和對 dirs 具有相同的效果,並且它們隱含 -p。

dirs(如果您想閱讀具體內容,可以查看有關部分)。看起來它基本上是在命令運行後列印目錄堆疊:

host:43> pushd /etc/init.d
/etc/init.d ~ 
host:44> pushd /var/log
/var/log /etc/init.d ~ 
host:45> pushd /tmp
/tmp /var/log /etc/init.d ~ 
host:46> cd -p
~ /var/log /etc/init.d ~ 
host:47> cd -v
0       ~
1       /var/log
2       /etc/init.d
3       ~
host:48> popd
/var/log /etc/init.d ~ 
host:49> cd -v
0       ~
1       /etc/init.d
2       ~

兩者都顯示目錄堆棧,但-v似乎更容易閱讀。堆疊頂端(元素 0)是目前目錄,1 是執行popd一次後要去的位置,依此類推。

相關內容