除了弗雷德的正確答案:
我明白您對內建和外部命令的衝突。 cd
命令實際上是一個小示範。
例如我的系統上,情況如下:
$ which cd # gives no output
$ whereis cd # again, no path found
cd:
$ type -a cd # verifies that it's a real builtin command
cd is a shell builtin
這清楚地表明,在外部程序換算的cd
命令沒有我的機器上安裝。在你的情況下,which cd
顯示在/usr/bin/cd
下安裝了額外的cd
命令(單獨的程序)。
有時不清楚何時輸入cd
是否打算調用內置命令或外部命令。爲了確保,你真的調用內置cd
命令,就可以執行以下命令:
$ builtin cd
從內置cd
命令的幫助頁面:
$ help builtin
內置:內置[殼 - 內建[arg ...]] 執行shell內置函數。現在
Execute SHELL-BUILTIN with arguments ARGs without performing command
lookup. This is useful when you wish to reimplement a shell builtin
as a shell function, but need to execute the builtin within the function.
可以看到builtin
命令如何使用強制執行shell內建命令的執行。這在特殊情況下非常有用。
此外,還可以(它實際上是顯而易見的)期望從內置命令 [source]更好的性能:
在一般情況下,在腳本叉掉一個子進程的外部命令, [*]而猛砸內置呢不。由於這個原因,內置函數更快地執行 ,並使用比它們的外部 等效命令少的系統資源。
'cd'在這裏是一個特殊情況,因爲它必須是一個內建的任何有用的效果。 '/ usr/bin/cd'實際上是無用的,因爲它作爲自己獨立的進程運行,它改變它自己的目錄然後退出 - 但是**不會改變調用它的單獨程序的目錄。 –
(...如果我們要迂腐的話,那麼'/ usr/bin/cd'有一點點用處 - 它決定了你是否可以*通過實驗改變到給定的目錄。) –