关于stdin与echo、ls、pwd命令配合工作原理的疑问
关于stdin与几个命令配合的疑问解答
1. 为什么echo < file1.txt没有输出?
echo命令的核心逻辑是输出命令行传入的参数,它不会主动读取标准输入(stdin)的内容:
- 执行
echo Hello World时,Hello World是直接传给echo的命令行参数,echo会直接输出这个参数,所以能看到预期结果; - 执行
echo < file1.txt时,echo没有收到任何命令行参数。虽然shell把file1.txt的内容重定向到了echo的stdin,但echo根本不会去读取这部分内容,最终只会输出一个空行(部分环境下看起来像“无输出”)。
对比cat命令:cat的设计目标就是读取stdin(或指定文件)并输出内容,所以cat < file1.txt会正常读取file1.txt的内容并打印,这是两个命令的本质区别。
2. 为什么ls < file1.txt > file2.txt和pwd < file1.txt > file2.txt看起来忽略了< file1.txt?
ls和pwd这两个命令的功能完全不依赖标准输入:
ls的作用是列出目录内容,它的信息来源是文件系统,不需要从stdin获取数据;pwd的作用是输出当前工作目录的路径,这个信息来自系统环境变量,同样和stdin无关。
所以即便你通过< file1.txt把文件内容重定向到它们的stdin,这两个命令也不会去读取这部分数据,只会按照自身逻辑执行,最后把结果输出到file2.txt中,看起来就像忽略了stdin重定向的部分。
内容的提问来源于stack exchange,提问作者Rodion Iskhakov
相关产品推荐
相关产品推荐

