首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重定向stderr

重定向stderr
EN

Stack Overflow用户
提问于 2014-08-28 20:25:37
回答 1查看 144关注 0票数 1

有一件事让我很困扰。我想把stderr重定向到fd5,所以我运行下面的命令:

代码语言:javascript
复制
me@/home/me>$ exec &2>5

[1]     307

因此,我期望这个重定向的结果是,从现在开始,错误将被发送到fd 5。但这是发生的事情:

代码语言:javascript
复制
me@/home/me>$ mkdir /a 5>/dev/null
mkdir: /a: [Permission denied]

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

代码语言:javascript
复制
me@/home/me>$ mkdir /a 2>/dev/null

有人能解释一下我哪里错了吗?

EN

回答 1

Stack Overflow用户

发布于 2014-08-28 20:34:47

代码语言:javascript
复制
exec &2>5

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

代码语言:javascript
复制
mkdir /a 5>/dev/null

这将文件描述符5重定向到/dev/null

您可以将stderr重定向到如下文件:

代码语言:javascript
复制
mkdir /a 2>some-file

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

代码语言:javascript
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25548812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档