我正在使用macOS,我注意到(通过一篇单独的文章)cat
命令是用C语言编写的。但是我确定我已经在其他地方读过一些shell命令(builtins?)是用Bash编写的。
你怎么能分辨出来?
UPDATE :似乎我被误导了,并且没有用bash编写内置命令。我必须阅读的是与外部可执行文件相关的内容。
答案 0 :(得分:1)
使用'文件'用于确定文件类型的命令。
内置函数不是用bash编写的。它本质上是命令解释器的一部分(通常是bash)。示例:' cd'。该文件'命令将无法找到内置命令并将发出错误。
答案 1 :(得分:1)
bash内置函数和可执行文件之间的区别在于,当从bash进程调用时,内置函数是函数调用,而外部命令则分叉新进程(如果不在后台等待终止)。
请注意调用新进程的开销
for((i=0;i<1000;i++)); do /bin/echo -n ; done
要知道命令是内置函数还是可执行文件,您可以使用type
type cat
type -a echo
明确调用echo
内置
builtin echo
显式调用echo
命令
command echo
注意更改像cd
这样的过程环境的命令不能是可执行文件,因为调用子进程不能改变调用者的环境。