如何将stderr和stdout重定向到脚本中同一行中的不同文件?

时间:2011-10-26 10:36:53

标签: linux bash

我非常了解:

$ command 2>> error

$ command 1>> output

有什么方法可以将stderr输出到错误文件并将stdout输出到同一行bash中的输出文件中?

5 个答案:

答案 0 :(得分:260)

只需将它们添加到一行command 2>> error 1>> output

即可

但请注意,如果文件已有数据,>>将用于附加。然而,>将覆盖文件中的任何现有数据。

所以,command 2> error 1> output如果您不想追加。

为了完成起见,您可以将1>写为>,因为默认文件描述符是输出。所以1>>是一回事。

因此,command 2> error 1> output变为command 2> error > output

答案 1 :(得分:15)

试试这个:

your_command 2>stderr.log 1>stdout.log

更多信息

数字09是bash中的文件描述符0代表标准输入,1代表标准输出,2代表标准错误。任何其他临时用途都可以39

可以使用运算符>将任何文件描述符重定向到文件或其他文件描述符。您可以使用运算符>>附加到文件而不是创建空文件。

用法:

file_descriptor >的文件名

file_descriptor > &安培;的类file_descriptor

请参阅http://www.tldp.org/LDP/abs/html/io-redirection.html

答案 2 :(得分:12)

或者,如果您想将输出(stdout和stderr)混合在一个文件中,您可能需要使用:

command > merged-output.txt 2>&1

答案 3 :(得分:9)

就像那样:

$ command >>output 2>>error

答案 4 :(得分:0)

可以重定向多个命令的输出。这适用于命令行或在bash脚本中最有用。 -s将密码提示引导到屏幕。

Hereblock cmds stdout / stderr被发送到单独的文件,没有任何显示。

sudo -s -u username <<'EOF' 2>err 1>out
ls; pwd;
EOF

Hereblock cmds stdout / stderr发送到单个文件并显示。

sudo -s -u username <<'EOF' 2>&1 | tee out
ls; pwd;
EOF

此处将cmd stdout / stderr cmd发送到单独的文件,然后将stdout显示出来。

sudo -s -u username <<'EOF' 2>err | tee out
ls; pwd;
EOF

取决于您是谁(用户)和用户名,可能需要密码,也可能不需要密码。