我有一个包含许多命令的 bash 脚本,其中一些命令可能会生成错误消息。通常,错误消息和输出消息以明显不正确的顺序混合(例如,我看到命令 #2 的输出,然后看到命令 #1 的错误消息)。
据我了解,原因是这些命令使用两个输出流 - stdout 和 stderr - 并且每个输出流都异步打印到控制台。因此,一种解决方案是通过在每个命令后添加“2>&1”将 stderr 重定向到 stdout。
但由于我有很多命令,所以最好对所有命令都执行一次。是否有一个命令可以放在脚本的开头,以确保所有命令的所有错误消息都重定向到 stdout,以便所有输出都以正确的顺序显示?
答案1
虽然我不相当看看标准输出和错误流如何在两个或多个非并发命令之间相互混合,您可以在脚本开头使用单个命令将两个输出流重定向到同一位置:
exec 2>&1
或者,您可以通过重定向来启动脚本:
./myscript.sh 2>&1
就我个人而言,我会选择第二个选项,因为它可以让您更轻松地打开或关闭此“功能”。