回答
如果你想看到内建的bash是如何被定义然后你只需要看看Section 4 of The Bash Man Page。
但是,如果您想知道bash布丁如何实现,您需要查看the Bash source code,因为这些命令被编译到bash可执行文件中。
查看命令是否为bash内建的一种快速简便的方法是使用help
命令。例如,help cd
将向您展示如何定义'cd'的bash内建。同样为help echo
。
佳丽, 检查bash shell中的源代码ftp://ftp.gnu.org/gnu/bash/bash-2.05b.tar.gz 你会发现贝壳的定义内置命令中没有单独的二进制可执行文件,但它的外壳二进制文件本身(名称壳内置的内清楚地表明这一点)。
壳牌内装 - http://linux.about.com/library/cmd/blcmdl1_builtin.htm 例如。 -
which cd
/usr/bin/which: no cd in (/usr/bin:/usr/local/bin......
不是shell内建的,而是二进制的。
which ls
/bin/ls
不完全正确 - 有时内置和可执行文件重叠,例如。虽然有'/ bin/echo'程序,但大多数shell都提供自己的'echo'内建。 – 2010-07-07 09:41:50
另一个例子是“时间” – 2014-05-27 11:38:14
内置实际内置套件因外壳而异。主要有:
- Special built-in utilities,必须内置,因为他们有一些特殊的属性
- Regular built-in utilities,这几乎都是内置的,由于性能或其他方面的考虑
- 任何标准工具如果shell实现者希望的话也可以内置。
您可以使用大多数shell支持的type
命令(尽管其输出未标准化)了解该实用程序是否内置。从dash
一个例子:
$ type ls
ls is /bin/ls
$ type cd
cd is a shell builtin
$ type exit
exit is a special shell builtin
重新cd
工具,理论上没有什么防止外壳实施者来实现它的外部命令。 cd
不能直接更改shell的当前目录,但是,例如,cd
可以通过套接字将新目录与shell进程进行通信。但没有人这样做,因为没有意义。除了非常老的shell(没有内置概念的地方),其中cd
使用了一些肮脏的系统破解工具来完成它的工作。
cd
在shell中如何实现?基本算法描述为here。它也可以做一些工作来支持shell的额外功能。
每个Unix shell至少有一些内置命令。这些内置命令是shell的一部分,并作为shell源代码的一部分实现。 shell认识到它被要求执行的命令是其内置的命令之一,并且它自己执行该操作,而不会调用单独的可执行文件。不同的shell有不同的内置,但是在基本设置中会有很多重叠。
有时,由于性能方面的原因,builtins内建。在这种情况下,在$PATH
中通常也有该命令的一个版本(可能具有不同的功能集,不同的可识别的命令行参数集等),但shell决定将该命令作为内置函数来执行,以便它可以拯救一个短暂的过程产卵的工作,做一些它自己可以做的工作。这是对于bash和printf的情况下,例如:
$ type printf
printf is a shell builtin
$ which printf
/usr/bin/printf
$ printf
printf: usage: printf [-v var] format [arguments]
$ /usr/bin/printf
/usr/bin/printf: missing operand
Try `/usr/bin/printf --help' for more information.
注意,在上面的例子中,printf的是两个内置的壳(实现为bash的自身的一部分),以及一个外部命令(位于/ USR /斌/ printf的)。请注意,它们的行为也不同 - 当不带参数调用时,内置版本和命令版本会打印不同的错误消息。另请注意,-v var
选项(将此printf的结果存储到名为var
的shell变量中)只能作为shell的一部分完成 - 子进程(如/ usr/bin/printf)无法访问执行它们的shell的变量。
这让我们进入故事的第二部分:一些命令是内置的,因为它们需要。一些命令,如chmod
,是系统调用的简洁包装。当您运行/bin/chmod 777 foo
时,shell会fork,execs/bin/chmod(传递“777”和“foo”)作为参数,新的chmod进程运行C代码chmod("foo", 777);
,然后将控制权返回给shell。但这不适用于cd
命令。尽管cd
看起来与chmod
的情况相同,但它的行为有所不同:如果shell产生了另一个进程来执行chdir
系统调用,它只会更改该新生成的进程的目录,而不会更改该目录。然后,当进程返回时,shell将被放置在与之前一样的目录中 - 因此需要将cd
作为shell内置实现。
- 1. 什么是$ shell命令
- 2. linux shell中的`set ovs_ctl $ {1-start}`命令是什么意思?
- 3. 什么是shell脚本命令从GitHub
- 4. Linux中的sed b命令是什么?
- 5. Linux命令行/ shell术语
- 6. 为什么这个linux shell命令暂停系统?
- 7. 这个shell命令做了什么?
- 8. 什么不对这个shell命令
- 9. PHP这个shell命令做什么?
- 10. 为什么设置命令是空白
- 11. 是什么“:?”意思是在这个shell命令中?
- 12. 从python脚本执行linux shell命令
- 13. Linux shell命令拆分日志文件
- 14. 在linux的bash shell查找命令
- 15. Windows中的Linux Bash Shell命令Powershell
- 16. 简单的Linux Shell。停止命令
- 17. linux和unix命令有什么区别?
- 18. unix shell设置命令
- 19. 什么是shell_add_cmd,是为linux添加命令?
- 20. 是g ++依赖于Linux运行类似linux的命令还是内置?
- 21. 什么是unix/linux内部?
- 22. 的Linux命令shell命令行奇怪的行为
- 23. Linux:从shell命令创建共享内存段
- 24. Linux Shell Scritping - 带命令的变量内部变量
- 25. linux命令内存类型
- 26. pymongo中的collection.getIndexes()shell命令的等效参数是什么?
- 27. bash shell命令行参数-e的含义是什么?
- 28. 从shell删除sqlite中的数据库的命令是什么?
- 29. shell中双方括号命令的名称是什么?
- 30. 重定向shell命令的输出& - 这是什么意思
这与内核无关。 – 2010-07-07 23:05:12