![这个命令有什么作用?命令开始和结束时的重定向](https://linux22.com/image/196055/%E8%BF%99%E4%B8%AA%E5%91%BD%E4%BB%A4%E6%9C%89%E4%BB%80%E4%B9%88%E4%BD%9C%E7%94%A8%EF%BC%9F%E5%91%BD%E4%BB%A4%E5%BC%80%E5%A7%8B%E5%92%8C%E7%BB%93%E6%9D%9F%E6%97%B6%E7%9A%84%E9%87%8D%E5%AE%9A%E5%90%91.png)
我有以下命令:
2>&1 compiler \
--flag1 \
--flag2 \
--option X=10 \
build \
2>&1 | tee -a output.log
我不完全确定这种行为是什么,它是多余的还是不需要的?
我在开始时使用了重定向来打印到 stderr
>&2 echo "Diagnostic Title"
我正在检查,但有点挣扎,没有看到命令规范的开始与结束:
任何帮助表示赞赏!
答案1
需要记住的一些事情:
- 重定向可以出现在命令中的任何位置
- 重定向是从左到右处理的(但仅在管道设置后)
鉴于这两点,我们可以看到第一点将 stderr 重定向到 stdout 当前指向的任何内容。 (这里是管道。)然后第二个执行完全相同的操作。由于标准输出其间没有改变,第二次重定向确实是多余的。
此外,这一点非常重要,也是这里相当常见的问题来源:
重定向已处理前该命令实际上被调用:
sed 'some sed program' myfile > myfile
截断我的文件第一的然后启动 sed,它有一个零长度的输入文件要处理。
这接受的答案@Kusalananda 指出的相关问题更深入。