Bash标准错误和标准输出重定向失败。

4
我有一个FORTRAN程序的输出结果,我希望将其重定向到文件中。我以前做过这件事并使用了:
$myprog.out>>out.txt 2>&1

但不知何故,这个程序没有起作用。我已经使用另一个简单的测试程序进行了测试。

$myprog.test>>out.txt 2>&1

并且它能正常工作

我运行myprog.out,输出像往常一样显示在屏幕上,但重定向似乎失败了!它之前是可以正常工作的,现在却停止了。这非常奇怪。我注释掉了几个不再需要的打印语句,重新编译后,重定向就不能用了。

我的输出明显有些不同,但如何诊断它去了哪里?


你可能需要展示一些程序代码,包括一些被注释掉的行。它是否直接写入tty而不是标准输出? - Dennis Williamson
感谢Dennis,一个输出行的示例是: - Tommy
打印 *,'||||||| 运行时间 = ', 运行时间, ' ||||||||||' - Tommy
2个回答

4
您可能需要刷新输出。例如,请参考此SO主题。如何做取决于您的编译器。因为只有Fortran 2003标准包括flush()语句和确定与stdout/stderr单元对应的数字的能力。
但是,在gfortran(例如)中,您可以使用flush()内置过程,并使用Unix文件描述符的等效项:UNIT=5表示stdin,UNIT=6表示stdout,UNIT=0表示stderr。
PROGRAM main

  PRINT *, "Hello!"
  CALL flush(6)
  CALL flush(0)

END PROGRAM main

谢谢。我会尝试并回报的。我刚刚在尝试使用单位0、5和6进行实验。 - Tommy
谢谢,我刚起床就看到了,它运行正常。非常感谢,Kemiisto。 - Tommy
@Tommy: "当你决定哪个答案对你最有帮助时,通过点击答案左侧的复选框轮廓将其标记为接受的答案。" 来自 SO FAQ (http://stackoverflow.com/faq) - Wildcat

0

使用>>,每次运行程序时都会将输出附加到out.txt文件中。

你可以尝试滚动到out.txt的末尾,看看你的输出是否在那里?


谢谢,是的,我知道关于>>追加的事情,使用>也会产生相同的结果(或失败的结果),但我只是使用>>,因为这是脚本中出现问题的那一行,所以我只是想让这一行正常工作。我从一个空文件out.txt开始,所以这不是问题。 - Tommy
感谢Dennis,一个输出行的示例是: - Tommy
print *,'||||||| 运行时间 = ',运行时间,' ||||||||||' - Tommy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接