我已阅读这个问题和答案 -将 stderr 重定向到 stdout但似乎没有任何方法可以捕获 Ubuntu 16.04 LTS 上名为 OpenMPI 的软件的错误。
我在 shell 脚本中输入 OpenMPI 命令
mpirun -np 4 command
然后在命令提示符下输入
job_script >& logs
这会捕获应用程序软件错误和输出,但不会捕获脚本引发的 OpenMPI 错误。现在如何捕获 OpenMPI 错误,因为这些错误将转为标准错误?
答案1
该>&
运算符将标准错误和标准输出重定向到同一目标。重定向标准错误是 csh 无法做到的最著名的事情之一,所以如果你想这样做,答案是不可能的。 (当然,这是可能的 - 但只能通过另一个程序,例如sh
。)但是,您想要重定向 stdout 以及 stderr,并且>&
正是这样做的。
如果job_script >& logs
发出一些输出,则应用程序必须直接写入终端。您无法通过重定向来捕获它。您可以使用该script
命令将所有内容(包括终端输出)记录到文件中。
script -c 'job_script' logs >/dev/null
话虽如此,现在已经是 2017 年了。自 (t)csh 在交互使用方面比 bash 具有优势以来,已经过去了大约 15 年,比 zsh 早了大约 25 年,而 csh 从来都不擅长编写脚本。现在已经到了让它退休的时候了。
答案2
从命令行cshell
执行此操作以分离 stdout/stderr 流:
( job_script > stdout.log ) >& stderr.log