【问题标题】:How are builtin commands implemented in shell?shell中的内置命令是如何实现的?
【发布时间】:2016-04-15 14:21:11
【问题描述】:

当一个shell(例如bash)调用一个可执行文件时,它首先是fork本身,然后是它的副本execve这个可执行文件。

当shell调用内置命令时,不会创建新进程,execve只能对可执行文件进行操作,而内置命令不存储在可执行文件中。

那么内置命令是如何存储的,它们又是如何通过系统调用来调用的呢?

【问题讨论】:

  • 这个问题表明您期望内置命令有点像外部可执行文件一样“启动”。为什么?它们是内置的。
  • 对所有问题/答案都投了反对票。为什么会这样?
  • 内建存储在可执行文件中,称为 bash。
  • 添加到@pfnuesel:不仅对三个一致的答案投了反对票,而且根本没有评论解释为什么事情被反对了;这有点恼人,考虑到反对者(假设它是一个单一的选民)在他/她的意见中占少数
  • 这是一个连续投票的案例,也是如此,没有留下任何评论。

标签: linux bash shell system-calls


【解决方案1】:

“内置命令”意味着您不必运行外部程序。所以,不,根本不涉及execve,甚至不涉及任何系统调用。你的 shell 实际上只是解析一个命令字符串并看到“嘿,这是一个内置命令,让我们执行这个和那个函数”。

【讨论】:

    【解决方案2】:

    您可以想象它们与 shell 函数相同。

    因此,shell 不是启动外部进程,而是调用一些内部函数库函数,该函数读取输入输出结果,并且与常规程序的 main 函数几乎相同。

    【讨论】:

      【解决方案3】:

      shell 进程本身只处理内置函数,因此可能会修改自身或其环境。可能根本没有进行任何系统调用。

      【讨论】:

      • 嗯,反对票从何而来?这个答案和这里给出的任何其他答案一样正确。
      猜你喜欢
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      相关资源
      最近更新 更多