为何执行echo 123 > a.txt b.txt仅生成一个文件?
问题原因解析
- shell的重定向逻辑:
>作为输出重定向符号,只会将命令的标准输出导向紧跟它的第一个文件名,而你写在a.txt后面的b.txt,会被shell当作echo命令的普通参数处理。 - 实际执行过程:当你运行
echo 123 > a.txt b.txt时,shell先处理> a.txt,把echo的输出目标指定为a.txt;随后echo命令接收的参数是123和b.txt,所以它会将这两个内容拼接后输出,最终a.txt里就变成了123 b.txt,而b.txt根本不会被创建。
正确实现多文件写入的方式
如果需要将内容同时写入多个文件,应该使用tee命令,示例:
echo 123 | tee a.txt b.txt
tee命令会将输入内容同时输出到终端(如果不需要终端输出,可以追加> /dev/null)和指定的所有文件中;如果是要追加内容而非覆盖,可添加-a参数:echo 123 | tee -a a.txt b.txt
内容的提问来源于stack exchange,提问作者hao
相关产品推荐
相关产品推荐

