如何判断shell命令是用Bash还是C编写的?

时间:2018-01-23 12:31:18

标签: c bash macos shell terminal

我正在使用macOS,我注意到(通过一篇单独的文章)cat命令是用C语言编写的。但是我确定我已经在其他地方读过一些shell命令(builtins?)是用Bash编写的。

你怎么能分辨出来?

UPDATE :似乎我被误导了,并且没有用bash编写内置命令。我必须阅读的是与外部可执行文件相关的内容。

2 个答案:

答案 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这样的过程环境的命令不能是可执行文件,因为调用子进程不能改变调用者的环境。