1

当我们调用任何shell命令时,任何人都可以帮助我理解内部的代码/步骤流程。例如,假设我在 bourne shell 上运行以下命令:

ls  -l | grep -r "string"

内部发生的函数调用是什么?

据我所知,它会在execv内部调用一些家庭函数。但是谁能告诉我它将进行的其他函数调用是什么以及它的顺序是什么?

4

2 回答 2

11

您可以使用 strace 实用程序自行查看会发生什么。运行它:

strace sh -c 'ls -l | grep -r "字符串"'

这将运行一个 shell,然后运行你的命令,最后 strace 将打印出在系统调用方面发生的幕后情况。

于 2013-07-24T11:19:34.147 回答
3

简而言之:

  1. 解析和词法分析
  2. 扩张
    1. 大括号展开
    2. 潮汐膨胀
    3. 变量扩展
    4. 算术和其他替代
    5. 分词
    6. 文件名生成/扩展
  3. 执行
    1. bash fork 本身(每个命令一次)
    2. 将 SIGINT 处理程序恢复为默认值
    3. 打开命令之间的管道(dups stdin,stdout)
    4. 关闭原始标准输入/标准输出
    5. 用命令执行每个孩子
    6. 父 bash 等待...

也许其他人会添加更精确的“步骤”......

于 2013-07-24T11:29:21.503 回答