Answers:
它主要是用来确保POSIX工具箱在外壳的内部和外部都可用(请参阅POSIX基本原理)。
对于cd
,这不是很有用,但请注意会cd
更改目录,但有其他副作用:它返回退出状态,该状态有助于确定您是否能够chdir()
访问该目录,并输出有用的错误消息,说明为什么不能chdir()
当你不能。
例:
dirs_i_am_able_to_cd_into=$(find . -type d -exec cd {} \; -print)
另一个潜在的副作用是目录的自动挂载。
在一些系统上,大多数用于标准shell内置程序的外部命令都以符号链接的形式实现,该脚本执行以下操作:
#! /bin/sh -
"${0##*/}" "$@"
那就是启动一个shell并在其中运行内置程序。
其他一些系统(如GNU)将实用程序作为真正的可执行命令,当行为与Shell内置版本不同时,可能会引起混乱。
cd
命令。在监视可自动挂载的远程文件系统的可用性时,或者在对某个文件执行时间紧迫的操作之前,这可能很有用。
事实上非内置cd命令可基本上是由于POSIX的要求,对所有常规内置命令是由exec命令族调用env
,find
,nice
,nohup
,time
和xargs
结合这样的事实:一些命令没有被自己实现为内建命令。
但这并没有多大意义,cd
因为将其与这些命令结合起来是毫无意义的。不过,这里还是有一些成立的例子:
find . -type d -exec cd {} \;
env HOME=/foo cd
break, :, continue, . , eval, exec, exit, export, readonly, return, set, shift, times, trap, unset
与外部命令无关,而cd
作为常规内建函数有一些已记录的用例作为命令。
/usr/bin/cd
,只有内置的shell。