除了弗雷德的正确答案:
我明白您对内建和外部命令的冲突。 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'有一点点用处 - 它决定了你是否可以*通过实验改变到给定的目录。) –