【发布时间】:2011-12-15 15:15:45
【问题描述】:
我知道这么多:
$ command 2>> error
$ command 1>> output
有什么办法可以将stderr输出到错误文件,并将stdout输出到bash的同一行中的输出文件?
【问题讨论】:
我知道这么多:
$ command 2>> error
$ command 1>> output
有什么办法可以将stderr输出到错误文件,并将stdout输出到bash的同一行中的输出文件?
【问题讨论】:
可以重定向多个命令的输出。这适用于命令行或在 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
Hereblock cmds stdout/stderr 被发送到单独的文件和 stdout 以显示。
sudo -s -u username <<'EOF' 2>err | tee out
ls; pwd;
EOF
根据您的身份 (whoami) 和用户名,可能需要也可能不需要密码。
【讨论】:
试试这个:
your_command 2>stderr.log 1>stdout.log
数字0 到9 是bash 中的文件描述符。
0 代表标准输入,1 代表标准输出,2 代表标准错误。 3 到 9 可用于任何其他临时用途。
任何文件描述符都可以使用> 操作符重定向到一个文件或另一个文件描述符。您可以改为使用运算符 >> 来追加文件,而不是创建一个空文件。
用法:
file_descriptor > filename
file_descriptor > &file_descriptor
请参考Advanced Bash-Scripting Guide: Chapter 20. I/O Redirection。
【讨论】:
或者,如果您想在一个文件中混合输出(stdout 和 stderr),您可能想要使用:
command > merged-output.txt 2>&1
【讨论】:
只需将它们添加到一行command 2>> error 1>> output
但是,请注意>> 用于在文件已有数据的情况下追加。而> 将覆盖文件中的所有现有数据。
所以,如果你不想追加,command 2> error 1> output。
为了完成,您可以将1> 写成>,因为默认文件描述符是输出。所以1> 和> 是一回事。
所以,command 2> error 1> output 变为 command 2> error > output
【讨论】:
1> 可以写成> 的解释
command &2>err.log 有什么不同,我想我完全混淆了sintaxies。 (所有 bash pipe-isms 的适当答案的链接可能是有序的)
command &2>err.log 不太合法——该语法中的 & 符号用于文件描述符作为目标,例如 command 1>&2 会将 stdout 重新路由到 stderr。
这样:
$ command >>output 2>>error
【讨论】: