我是新手,正在寻找一些信息。
提前致谢。
echo" Hello World之间有什么区别!"还有一个打印" Hello World!"使用printf。
如何执行shell命令。例如,如果我给ls
,它会列出目录中的所有文件。当我们在shell中输入ls
时,是否存在可执行二进制文件。
如果你们有任何链接或消息来源,请告诉我。
答案 0 :(得分:3)
shell可以执行两种主要类型的“命令”。内置命令由shell本身执行 - 没有启动新程序。只需在shell提示符下键入echo
就是这种内置命令的一个示例。
另一方面,其他命令执行外部程序(也称为二进制文件) - ls
就是这种命令的一个例子。
因此,如果在shell中运行echo
,它将由shell本身执行,但如果您编写执行相同操作的C程序,则它将作为外部程序运行。事实上,大多数Linux系统都带有这样的二进制文件,位于/bin/echo
。
为什么有一个内置命令和一个程序来完成相同的任务有时是有意义的?内置命令执行速度更快,因为运行外部程序需要一些成本。但是内置插件也有一些缺点:它们不能太复杂,因为这会使外壳变大和变慢;它们不能与shell分开升级,也不能彼此升级;最后,有些情况下,不是你的shell的外部程序想要运行一个应用程序:它可以运行外部程序,但它不能直接执行shell内置函数,因为它不是shell。所以有时候两种方式都有意义。除了echo
之外,time
是这种双重方法的另一个例子。
答案 1 :(得分:0)
shell只是用户级别与操作系统或内核交互的方式。这是它被称为 shell 的原因之一。 shell本身(sh
,csh
,tcsh
,ksh
,zsh
,bash
等等......本质上只是一个二进制文件执行操作系统以允许您执行其他二进制文件。
它通常提供许多其他功能,但内置函数(echo
,fg
,jobs
等...),一种解释性语言(for x in ...
,if then
等等......),命令历史等等......
因此,任何输入shell的文本(如echo
),二进制(或进程)都会在其代码中解释并运行相应的函数。内置函数(如echo
)不需要创建新进程,但如果文本被解释为执行二进制文件的请求(vim
,emacs
,{ {1}},gcc
,test
,true
等等... shell会为它创建一个新进程(除非用false
作为前缀),并执行它。
因此,exec
只运行shell(进程)中的代码。 echo "Hello World!
将是单独的二进制文件,shell将为(printf("Hello World!")
)创建一个新进程,并使操作系统执行(fork
)。