我想打印GROMACS 5.1.2的所有输出。
我知道如何使用>
和<
进行std进出,还尝试2>&1
一起打印错误和输出,也单独尝试,它仍然无法打印所有内容,当它告诉我什么是问题并且我需要那些信息时,特别是一些有用的提示。
我认为这不会被保存,因为它来自不同的代码,主程序执行子程序,然后崩溃,我只在屏幕上得到报告。我会在输出中看到出错的地方,那是什么,但在屏幕上我有更多的信息。
如果有人知道如何做到这一点,我会非常感激。
此外,我还没有完整的菜鸟,但如果您能明确解释,我们非常感激。
例如,如果您想使用RCBS蛋白质数据库中的gmx pdb2gmx
尝试3mlj.pdb
命令,我将在屏幕上阅读:
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
答案 0 :(得分:2)
您必须按正确的顺序(从左到右)进行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重定向。
另请参阅How to pipe stderr and not stdout和Bash I/O Redirections。