当我在某个shell(bash / ksh / csh / sh / whatsoever_shell)中输入命令ls *.txt
时,
1)shell首先展开通配符表达式*.txt
(例如a.txt,b.txt,c.txt)
2)然后fork()
进行子进程
3)使用扩展表达式作为命令行参数调用exec()
(或它的变体)
我的理解是否正确?或者这是否以涉及管道的其他方式发生?
答案 0 :(得分:3)
您的理解是正确的。不需要使用管道,因为子进程可以共享shell的标准I / O文件描述符。