如何重定向标准derr和标准输出到不同的文件在同一行脚本?

我知道这些:

$ command 2>> error


$ command 1>> output

有什么方法我可以输出标准错误文件和输出标准输出到输出文件在bash的同一行?

115554 次浏览

只需在一行command 2>> error 1>> output中添加它们

但是,请注意,>>用于在文件已经有数据的情况下追加。然而,>将覆盖文件中任何现有数据。

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

为了完成,你可以把1>写成>,因为默认的文件描述符是输出。所以1>>是同一个东西。

因此,command 2> error 1> output变成了,command 2> error > output

像这样:

$ command >>output 2>>error

或者如果你喜欢混合输出(stdout &Stderr)在一个文件中,你可能想使用:

command > merged-output.txt 2>&1

试试这个:

your_command 2>stderr.log 1>stdout.log

更多的信息

数字09在bash中是文件描述符0表示标准输入,1表示标准输出,2表示标准误差。39用于任何其他临时用途

任何文件描述符都可以使用操作符>重定向到一个文件或另一个文件描述符。你可以使用操作符>>来追加一个文件,而不是创建一个空文件。

用法:

file_descriptor > filename


file_descriptor > &file_descriptor

请参考高级bash脚本指南:第20章。I / O重定向

多个命令的输出可以被重定向。这既适用于命令行,也适用于bash脚本。-s将密码提示指向屏幕。

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

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

在此block中,cmds的stdout/stderr被发送到单个文件并显示。

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

在此block中,cmds stdout/stderr被发送到单独的文件和stdout来显示。

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

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