shell – 2>& – ,2> / dev / null,|&,&> / dev / null和> / dev / null 2>&1之间的区别

只是寻找之间的区别

> 2>& –
> 2> / dev / null
> |&
>&> / dev / null
>> / dev / null 2>& 1

以及它们与非Bourne shell的可移植性,如tcsh,mksh等.

最佳答案
背景:

>数字1 =标准输出(即STDOUT)
>数字2 =标准误差(即STDERR)
>如果未明确给出数字,那么shell(bash)将假定数字1

首先让我们来解决这些问题.供参考,请参阅Advanced Bash-Scripting Guide.

功能

2 – ;&安培; –

这个的一般形式是M>& – ,其中“M”是文件描述符号.这将关闭所引用的文件描述符的输出,即“M”.

2 – ;的/ dev / null的

这一个的一般形式是M> / dev / null,其中“M”是文件描述符号.这会将文件描述符“M”重定向到/ dev / null.

2 – ;&安培; 1

这个的一般形式是M>& N,其中“M”和& “N”是文件描述符号.它将文件描述符“M”和“N”的输出组合成单个流.

|&安培;

这只是2>& 1 |的缩写.它被添加到Bash 4中.

&安培;>的/ dev / null的

这只是> / dev / null 2>& 1的缩写.它将文件描述符2(STDERR)和描述符1(STDOUT)重定向到/ dev / null.

>的/ dev / null的

这只是1> / dev / null的缩写.它将文件描述符1(STDOUT)重定向到/ dev / null.

非bash,tcsh,mksh等的可移植性

我没有处理csh和tcsh之外的其他shell.与bash的重定向运算符相比,我对这两者的体验是bash在这方面是优越的.有关详细信息,请参阅tcsh man page.

csh / tcsh直接支持你提到的关于none的命令.您必须使用不同的语法来构造类似的函数.

转载注明原文:shell – 2>& – ,2> / dev / null,|&,&> / dev / null和> / dev / null 2>&1之间的区别 - 代码日志