
平台:CentOS 6.2
外殼:tcsh
我正在玩cd
一個 BASH 腳本,並注意到了奇妙的事情cd -
選項,但留下了很多疑問......
- 為什麼
cd -
?這不是多餘的嗎cd ..
?
編輯
[正如 FatalError 指出的,這兩個命令不做同樣的事情......所以答案是“否”] -
你能像瀏覽器中的 la 一樣 進一步深入研究你的 flag 歷史嗎?
例如,當我輸入 時cd -
,它會將我帶到以前的目錄,但是如果我再次輸入該命令,它會將我帶到剛剛來自的目錄,從而創建循環。
是否支援傳回多個層級的簡寫?
編輯
我意識到我可以用 回去cd ..
,但希望這可以成為通往不那麼冗長的深層的門戶,例如cd -3
vs.cd ../../../
...希望這能澄清我要問的內容......
編輯2
至於目前的回饋, while..
是一個特殊目錄,我看不出為什麼內建cd
的終端不能使用例如的簡寫../../ ... ../
或cd ..5
為什麼內建也不能有歷史記錄(a la autopushd
/popd
) 可以像 一樣開啟和使用cd -3
。我知道這可能存在一定的安全/隱私風險,但我不認為這比儲存命令歷史記錄更糟糕,大多數 shell/終端都是這樣做的。- 的線上幫助頁
cd
可通過man cd
和存取help cd
(這對於任一命令都是相同的),僅列出-L
和-P
標誌。
但是,當我輸入時,cd --help
它會輸出Usage: cd [-plvn][-|<dir>].
.
我是否正確地假設其他標誌和 - (後)選項是非標準的? -n
和標誌有什麼-v
用?
兩者似乎都帶我回到我的主目錄,這就是我透過實驗所能弄清楚的。
快速閱讀網路資源[1][2]提供的資訊與手冊頁相同,但沒有回答我的問題。
注意:上面聲稱的第二個以 Linux 為中心的資源cd
只有兩個選項(在當前版本中顯然不正確CentOS
),因此我假設此功能可能是非標準的。
答案1
cd -
不等於cd ..
。該cd -
命令轉到以前的例如,如果您目前所在的目錄/home/bob
然後運行cd /var/log
,則運行cd -
會將您帶回/home/bob
。cd ..
另一方面,總是轉到父目錄。如果你想保留這樣的歷史記錄,我建議你查看一下
pushd
,popd
它可以讓你使用「目錄堆疊」: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 中引用父目錄的特殊目錄連結。cd
是一個內建命令,因此它的標誌和用法可能會因 shell 而異。但是,一般來說,一個系統上的選項cd
應該bash
與另一個系統上的選項相同。我的
bash
shell 沒有列出這些標誌中的任何一個...您是否正在嘗試使用bash
ortcsh
?如果你正在使用,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
一次後要去的位置,依此類推。