重定向stderr

时间:2014-08-28 12:25:37

标签: shell unix

有些事困扰我很多事。我想重新定向stderr让我们说fd 5.所以我运行以下命令:

me@/home/me>$ exec &2>5

[1]     307

所以我期望这次重定向的结果是,从现在开始,错误将被发送到fd 5.但这就是发生的事情:

me@/home/me>$ mkdir /a 5>/dev/null
mkdir: /a: [Permission denied]

它会在stdout上显示错误。当我重定向2时它没有显示任何内容:

me@/home/me>$ mkdir /a 2>/dev/null

有人可以解释我错在哪里吗?

1 个答案:

答案 0 :(得分:1)

exec &2>5

这不会将stderr重定向到文件描述符5.它会将其重定向到名为5的文件。 请注意,正如glenn jackman在评论中提到的,这是在仅由后台exec创建的子shell中完成的(您使用的&并不意味着2将被视为文件描述符。这意味着exec将在后台调用!

mkdir /a 5>/dev/null

此重定向文件描述符5为/dev/null

您可以将stderr重定向到这样的文件:

mkdir /a 2>some-file

现在看看它们之间的区别:

mkdir /a 2>&1          # redirect stderr to fd 1, which is stdout
mkdir /a 2>1           # redirect stderr to file named "1"
mkdir /a >x 2>&1       # redirect stdout to x, AND stderr to stdout, which also goes into x
mkdir /a 2>&5          # redirect stderr to fd 5, presuming there IS an open file with fd 5