Shell 非常奇怪的重定向stdout和stderr问题有人能解释一下吗?

Shell 非常奇怪的重定向stdout和stderr问题有人能解释一下吗?,shell,stdout,stderr,Shell,Stdout,Stderr,我有两个调用产生非常不同的输出: 呼叫一: dmake -m _makefile_.m 1>> _results.out 2>> _results.out 呼叫二: dmake -m _makefile_.m >2&1 >_results.out dmake进行排序编译,第一个调用正确地内联编译错误,而第二个调用将所有编译错误放在顶部。我一直认为这两者是等价的。这两个电话的区别到底是什么?这是因为缓冲吗?>2&1不是正确的语法;它将dmake命令

我有两个调用产生非常不同的输出:

呼叫一:

dmake -m _makefile_.m  1>> _results.out 2>> _results.out
呼叫二:

dmake -m _makefile_.m >2&1 >_results.out

dmake进行排序编译,第一个调用正确地内联编译错误,而第二个调用将所有编译错误放在顶部。我一直认为这两者是等价的。这两个电话的区别到底是什么?这是因为缓冲吗?

>2&1
不是正确的语法;它将
dmake
命令的输出重定向到名为
2
的文件(在后台运行),然后尝试运行名为
1
的命令,其输出重定向到
\u results.out

你想要:

dmake -m _makefile_.m >_results.out 2>&1
如果要附加到文件,请将
更改为
>


我不能100%确定这是否会以您想要的方式散布stdout和stderr。

您的意思是
2>&1
而不是
>2&1
?这是你问题中的一个输入错误,还是你真的在使用
>2&1
?是的,可能是因为缓冲。到stderr的输出通常是无缓冲的。有一些关于强制stdout不受缓冲的信息,但这很难看。真的吗?你用的是什么外壳?
>2&1
语法在tcsh、bash、ksh或zsh中不适用。这可能是问题所在吗?该命令是否创建了一个名为
2
的文件?或者您是否在注释中省略了一个逗号(“否,问题中的输入错误”)?我没有看到名为2的文件,而且旧方法似乎有效。。。所有的错误都在上面。也许你是对的。我没有编写call two,并且错误地假设它具有正确的语法。我使用ksh的方式2>&1是我所有其他脚本使用的。我开始怀疑你是对的,基思。