我有以下命令:
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 指出的相关问题更深入。