Ubuntu 22.04中`wc < f1 f2`命令执行原理的技术疑问
关于
wc < f1 f2命令执行逻辑的疑问与解答 操作复现
$ echo -n 'a' > f1 $ wc f1 0 1 1 f1 $ echo -n 'bb' > f2 $ wc f2 0 1 2 f2 $ wc < f1 f2 0 1 2 f2
疑问解答
当
wc被传入文件参数时,是否会丢弃标准输入?
是的。wc的行为规则很明确:只要命令行指定了文件参数,就只处理这些文件,完全忽略标准输入。只有在没有任何文件参数的情况下,它才会读取并处理标准输入。wc内部是否同时处理标准输入和参数文件的文件描述符,还是内核将标准输入从f1切换到了f2?
都不是。内核没有修改标准输入的指向——此时wc的标准输入确实绑定到f1,但wc程序根本不会去读取它。程序自身逻辑决定:只要存在文件参数,就优先处理参数指定的文件,完全不触碰标准输入的文件描述符。wc < f1 f2这类命令的实际执行逻辑到底是什么?
整个执行过程分两步:
- Shell先处理重定向操作:将
wc的标准输入(文件描述符0)关联到f1,这一步由Shell完成,和wc程序无关。 - Shell启动
wc程序,并将f2作为命令行参数传递给它。 wc启动后检测到存在命令行参数(f2),直接打开并处理f2的内容,完全不读取已经被重定向到f1的标准输入,最终输出f2的统计结果。
内容的提问来源于stack exchange,提问作者gambarimas87
相关产品推荐
相关产品推荐

