您的位置:首页 > Web前端

Difference between 2>&-, 2>/dev/null, |&, &>/dev/null and >/dev/null 2>&1

2016-06-21 15:05 483 查看
http://unix.stackexchange.com/questions/70963/difference-between-2-2-dev-null-dev-null-and-dev-null-21

Just looking for the difference between

2>&-

2>/dev/null

|&

&>/dev/null

>/dev/null 2>&1

and their portability with
non-Bourne shells
like
tcsh
,
mksh
, etc.

For background:

a number 1 = standard out (i.e. STDOUT)
a number 2 = standard error (i.e. STDERR)
if a number isn't explicitly given, then number 1 is assumed by the shell (bash)
First let's tackle the function of these. For reference see the
Advanced Bash-Scripting Guide.

Functions

2>&-

The general form of this one is
M>&-
, where "M" is a file descriptor number. This will close output for whichever file descriptor is referenced, i.e.
"M".

2>/dev/null

The general form of this one is
M>/dev/null
, where "M" is a file descriptor number. This will redirect the file descriptor,
"M", to
/dev/null
.

2>&1

The general form of this one is
M>&N
, where "M" &
"N" are file descriptor numbers. It combines the output of file descriptors
"M" and "N" into a single stream.

|&

This is just an abbreviation for
2>&1 |
. It was added in Bash 4.

&>/dev/null

This is just an abbreviation for
>/dev/null 2>&1
. It redirects file descriptor 2 (STDERR) and descriptor 1 (STDOUT) to
/dev/null
.

>/dev/null

This is just an abbreviation for
1>/dev/null
. It redirects file descriptor 1 (STDOUT) to
/dev/null
.

Portability to non-bash, tcsh, mksh, etc.

I've not dealt much with other shells outside of
csh
and
tcsh
. My experience with those 2 compared to bash's redirection operators, is that bash is superior in that regard. See the
tcsh man page for more details.

Of the commands you asked about none are directly supported by csh/tcsh. You'd have to use different syntaxes to construct similar functions.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: