首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sh命令: exec 2>&1

sh命令: exec 2>&1
EN

Stack Overflow用户
提问于 2009-08-01 16:17:32
回答 6查看 50.8K关注 0票数 57

此命令将执行什么操作?

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

回答 6

Stack Overflow用户

发布于 2012-10-26 22:01:49

我见过的关于"2>&1“的更好的文章之一是Bash One-Liners Explained, Part III: All about redirections

但目前对这个问题的回答未能提供为什么你会想要在一个简单的"exec“之后这样做。正如exec命令的bash手册页所解释的那样:“如果未指定命令,则任何重定向都将在当前shell中生效”。

我编写了一个名为out-and-err.py的简单脚本,该脚本将一行输出写入标准输出,另一行写入标准输出:

代码语言:javascript
复制
#!/usr/bin/python
import sys
sys.stdout.write('this is stdout.\n')
sys.stderr.write('this is stderr.\n')

然后我将其封装在一个名为out- And -err.sh的shell脚本中,并使用"exec 2>&1":

代码语言:javascript
复制
#!/bin/bash
exec 2>&1
./out-and-err.py

如果我只运行python脚本,那么stdout和stderr是分开的:

代码语言:javascript
复制
$ ./out-and-err.py 1> out 2> err
$ cat out
this is stdout.
$ cat err
the is stderr.

但是,如果我运行shell脚本,您可以看到exec负责stderr之后的所有工作:

代码语言:javascript
复制
$ ./out-and-err.sh 1> out 2> err
$ cat out
this is stdout.
this is stderr.
$ cat err
$

如果您的包装2>&1脚本不只是一个python命令,并且您需要将所有输出合并到标准输出中,那么执行"exec shell“将使您更容易做到这一点。

票数 35
EN

Stack Overflow用户

发布于 2009-08-01 16:18:06

它将标准误差绑定到标准输出

2是stderr,1是stdout。当您运行一个程序时,您将在stdout中得到正常的输出,但是任何错误或警告通常都会发送到stderr。例如,如果您希望将所有输出通过管道传输到一个文件,那么首先将stderr、stdout和2>&1组合起来是很有用的。

票数 14
EN

Stack Overflow用户

发布于 2009-08-01 16:21:03

正如@cma所说,它将stderr放在stdout上。您希望此行为的原因可能是使用grep或任何其他实用程序来捕获只出现在stderr上的输出。或者,您可能只想将所有输出(包括stderr )保存到一个文件中,以便稍后处理。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1216922

复制
相关文章

相似问题

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