壳牌高管和管道

时间:2014-01-28 08:25:09

标签: bash shell command-line exec pipe

我正在使用bash,据我所知,exec后跟一个命令应该替换shell而不创建新进程。例如,

exec echo hello

具有打印“hello”然后立即退出的外观,因为在echo完成后,shell进程不再返回。

如果我把它作为管道的一部分 - 例如,

exec echo hello | sed 's/hell/heck/'

echo hello | exec sed 's/hell/heck/'

我的期望是,类似地,shell会因为其进程被替换而终止。这不是现实中发生的事情 - 上面的命令都打印“hecko”并正常返回shell,就好像“exec”这个词不存在一样。这是为什么?

1 个答案:

答案 0 :(得分:5)

bash手册中有句子:

  

管道中的每个命令都作为一个单独的进程执行(即,在   一个子壳)。

因此,在两个示例中,两个进程首先由管道生成,'exec'在生成的进程中执行 - 不会影响执行管道的shell。