Answers:
只需将它们添加到一行中 command 2>> error 1>> output
但是,请注意,>>
如果文件已经有数据,则用于追加。而>
将覆盖文件中的所有现有数据。
因此,command 2> error 1> output
如果您不想附加。
只是为了完整起见,您可以1>
像>
默认文件描述符是输出那样编写。因此1>
,>
是同一回事。
因此,command 2> error 1> output
成为command 2> error > output
command &2>err.log
什么不同,我认为我完全混淆了语法。(可能会正确链接所有bash管道行为的适当答案)
command &2>err.log
不太合法-语法中的&符用于文件描述符作为目标,例如command 1>&2
将stdout重新路由到stderr。
试试这个:
your_command 2>stderr.log 1>stdout.log
该数字0
经过9
是文件描述符在bash。
0
代表标准输入,1
代表标准输出,2
代表标准误差。3
到9
其他任何临时用途都可以使用。
可以使用运算符将任何文件描述符重定向到一个文件或另一个文件描述符>
。您可以改为使用运算符>>
将其追加到文件中,而不用创建一个空文件。
用法:
file_descriptor > filename
file_descriptor > &file_descriptor
请参考《高级Bash脚本指南》:第20章。
像那样:
$ command >>output 2>>error
或者,如果您希望将输出(stdout和stderr)混合在一个文件中,则可以使用:
command > merged-output.txt 2>&1
多个命令的输出可以重定向。这适用于命令行或在bash脚本中最有用。该-s
指示密码提示屏幕。
Hereblock cmd stdout / stderr发送到单独的文件,没有任何显示。
sudo -s -u username <<'EOF' 2>err 1>out
ls; pwd;
EOF
Hereblock cmd stdout / stderr发送到单个文件并显示。
sudo -s -u username <<'EOF' 2>&1 | tee out
ls; pwd;
EOF
Hereblock cmd stdout / stderr被发送到单独的文件中,并以stdout显示。
sudo -s -u username <<'EOF' 2>err | tee out
ls; pwd;
EOF
根据您是谁(whoami)和用户名,可能需要也可能不需要密码。
1>
写为>