我正在使用bash,据我所知,exec后面的命令应在不创建新过程的情况下替换shell。例如,
exec echo hello
出现打印" Hello",然后立即退出,因为Echo完成后,Shell过程不再存在。
如果我将其作为管道的一部分,例如,
exec echo hello | sed 's/hell/heck/'
或
echo hello | exec sed 's/hell/heck/'
我的期望是,同样,外壳将由于其被替换而终止。不过,这并不是现实中发生的事情 - 上面的两个命令打印" hecko"并正常返回外壳,就像" exec"一词不在那样。为什么这是?
bash手册中有句子:
管道中的每个命令都是作为单独的过程执行的(即 一个子壳)。
因此,在两个示例中,第一个管道首先产生了两个过程,并且" Exec"在一个产卵过程之一内执行 - 没有影响外壳执行管道。