我想打印GROMACS 5.1.2的所有输出。
我知道如何使用>
和<
进行std输入和输出,还尝试了2>&1
一起打印错误和输出,也尝试了单独打印,它仍然不会打印所有内容,尤其是最后当它告诉我问题是什么,我需要这些信息时,会有一些有用的提示。
我认为这不会被保存,因为它来自不同的代码,主程序执行一个子程序,然后崩溃,我只在屏幕上得到报告。我会在输出中看到出了问题,以及问题是什么,但在屏幕上我有更多的信息。
如果有人知道我该怎么做,我会非常感激
我也不完全理解,但如果你能明确地解释,我将不胜感激。
例如,若你们想用RCBS蛋白质数据库中的3mlj.pdb
来尝试gmx pdb2gmx
命令,在屏幕上我会读到:
Fatal error: Residue 'CU' not found in residue topology database
但在标准输出中,我只会读到:
This chain does not appear to contain a recognized chain molecule.
对我来说,CU是非常重要的信息,这只是一个例子。
我在这里分享我的操作系统:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 14.04.4 LTS
Release: 14.04
Codename: trusty
也尝试过,结果完全相同:
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 15.10
Release: 15.10
Codename: wily
我想为批处理文件运行的bash脚本:
#$ -S /bin/bash
for infile in *.pdb
do
gmx pdb2gmx -f $infile -o ${infile/pdb/gro} -water spce -ff oplsaa
-p ${infile/pdb/top} -i ${infile/pdb/itp} 2>&1 > ${infile/pdb/err}
done
必须按正确的顺序(从左到右)执行I/O重定向。
您有:
gmx pdb2gmx … -i ${infile/pdb/itp} 2>&1 > ${infile/pdb/err}
这会将标准错误发送到标准输出当前所在的位置(终端),然后将标准输出(但不是标准错误)发送到文件。
您需要:
gmx pdb2gmx … -i ${infile/pdb/itp} > ${infile/pdb/err} 2>&1
这会将标准输出发送到文件,然后将标准错误发送到同一位置。请注意,在这两个系统中,仍有两个单独的文件描述符(1
或标准输出,以及2
或标准错误)在使用中;唯一的问题是文件描述符连接到哪个文件
如果是管道数据,则在处理其他I/O重定向之前设置管道,但在其他情况下,每个命令的I/O重定向将从左到右进行处理。
另请参阅如何通过管道发送stderr而不是stdout,以及Bash I/O重定向。