如何打印所有已打印的和在终端上可以看到的内容



我想打印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重定向。

相关内容

  • 没有找到相关文章

最新更新