这个命令有什么作用?命令开始和结束时的重定向

这个命令有什么作用?命令开始和结束时的重定向

我有以下命令:

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 指出的相关问题更深入。

相关内容