我正在使用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”这个词不存在一样。这是为什么?
答案 0 :(得分:5)
bash手册中有句子:
管道中的每个命令都作为一个单独的进程执行(即,在 一个子壳)。
因此,在两个示例中,两个进程首先由管道生成,'exec'在生成的进程中执行 - 不会影响执行管道的shell。