哪个程序接收命令行命令?

哪个程序接收命令行命令?

当您在终端“vim 文件名”上写入时,我知道 vim 接收文件名作为参数,但我猜想程序也接收 vim 作为参数......它只是终端模拟器还是另一个程序?

答案1

当您vim filename在命令行上键入时,shell 已经启动,因此 shell(和终端仿真器)不会vim作为命令行参数。

vim,另一方面,可以,但这对用户不可用。当一个程序启动时,它的名字是通常作为第零个命令行参数给出。您可以通过启动 shell 并 echo 来看到这一点$0

$ sh
$ echo $0
sh
$ exit

shell 使用execve()(或类似的exec()函数)在命令行上执行命令,其POSIX规范

中的值argv[0]应指向与函数之一启动的进程关联的文件名字符串exec

argv[0]上面的文本对应于$0shell 脚本。

基本原理部分继续说道:

对严格符合 POSIX 应用程序的要求还指出:作为第一个参数传递的值是与正在启动的进程关联的文件名字符串。尽管某些现有应用程序在某些情况下传递路径名而不是文件名字符串,但文件名字符串更普遍有用,因为它的常见用法argv[0]是在打印诊断中。在某些情况下,传递的文件名不是文件的实际文件名;例如,登录实用程序的许多实现都使用在实际文件名前添加前缀<hyphen-minus>( -) 的约定,这向调用的命令解释器表明它是“登录 shell”。

相关内容