有一件事让我很困扰。我想把stderr重定向到fd5,所以我运行下面的命令:
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有人能解释一下我哪里错了吗?
发布于 2014-08-28 20:34:47
exec &2>5这不会将stderr重定向到文件描述符5。它会将其重定向到名为5的文件。请注意,正如glenn jackman在评论中提到的,这是在仅由backgrounding exec创建的子subshell中完成的(您使用的&并不意味着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 5https://stackoverflow.com/questions/25548812
复制相似问题