zsh 中存在 multios 时,'&> word' 和 '> word 2>&1' 有什么区别?

zsh 中存在 multios 时,'&> word' 和 '> word 2>&1' 有什么区别?

作为手动的说:

请注意,在存在多操作系统的情况下,这与“ ”的效果不同> word 2>&1(请参阅下面的部分)。

但是读完 multios 部分后,我还是搞不清楚两者的区别。有人能举个例子吗?

答案1

问题是每个实例2>&1导致 stderr 再次重定向到已经完成的 stdout 的每个重定向。请参阅此示例多操作系统部分

但是,请考虑:

date >output >&1

由于重定向是按顺序评估的,因此当>&1遇到时,标准输出将设置为文件输出,因此输出的另一个副本将发送到该文件。这不太可能是我们想要的。

并举一个例子来说明具体问题:

% (echo foo; echo bar >&2) &> baz &> baz2
% head baz baz2
==> baz <==
foo
bar

==> baz2 <==
foo
bar

在这里,每一行在每个文件中显示一次,这可能是这些重定向的目的。

> word 2>&1但是,直接用以下形式替换&> word

% (echo foo; echo bar >&2) > baz 2>&1 > baz2 2>&1
% head baz baz2
==> baz <==
foo
bar
bar

==> baz2 <==
foo
bar

请注意发送到第一个文件的 stderr 的额外副本。

所以相当于&> word1 &> word2 &> word3 ...实际上只是> word1 > word2 > word3 ... 2>&1.

相关内容