在linux上单独执行屏幕有输出,重定向后没有任何输出了。 myprog > 1.log 或 myprog tee 1.log

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在linux上单独执行屏幕有输出,重定向后没有任何输出了。 myprog > 1.log 或 myprog tee 1.log相关的知识,希望对你有一定的参考价值。

我们知道linux有三种主要的文件描述符 STDIN=0(标准输入,一般指键盘)、STDOUT=1(标准输入,一般指显示器)、STDERR=2(标准错误,一般也指向显示器)。
正常来说myprog将把输出指向STDOUT上,但是你使用了重定向命令,也就是[>]和[<],就将标准输出的内容导入到1.log上,标准输出原来的默认输出定向显示器将得不到任何信息,但是这时如果出现错误,STDERR还指向显示器,因此错误还将出现在显示器上。
你的这两个语句相当于 myprog 1>1.log,把标准输出导向到1.log。
参考技术A

单独的重定向操作会隐藏原来的输出,可以配合 tee 命令来使用,具体用法请百度,简单用例如下

输出到 1.log

myprog | tee 1.log

追加到 1.log

myprog | tee -a 1.log

追问

就是有问题啊,单独执行屏幕上有输出,用了重定向,屏幕和文件都没有输出了。
其他程序是可以的。而且用了2 >&1
大概是什么原因?

追答

抱歉,么仔细看题目,原来已经用了 tee 了啊。。难道 myprog 编程时不是用的标准输出?

追问

有哪些可以打印到屏幕的情况?有可能不是标准输出,但是确实可以显示到屏幕上

追答

对这个没什么研究,等下看是否有大神吧。我觉得如果程序直接操作输出缓冲区就能跳过标准设备,老早之前在DOS时代的时候,也有很多非字符的游戏,就是这么做的。

追问

没有cout<<flush,这是原因

追答

怪异哈,应该碰到回车或者缓冲区满了会自动flush的,否则屏幕咋能看到输出呢。
学习了!同样感谢您能回来告知原因。

本回答被提问者和网友采纳
参考技术B 你重定向了当然没有输出了
查看你的1.log文件看看里面的内容
还有你的mypro程序是自己写的吧
标准输出由于缓冲区的原故在重定向时会等到缓冲区满后才会写入
所以你的mypro程序执行完后再看看你的1.log文件
参考技术C 可能是后面的指令被程序当作参数读取了,然后工作不正常。

Linux重定向与管道

重定向 redirection

 

每个命令有输入源和输出目的地,默认行为,是标准输入和标准输出。大多数情况,标准输入是键盘,标准输出是屏幕。可以为单独的操作修改输入和输出,这就是重定向。重定向可以使某个命令从源文件输入而不是键盘,或输出到显示器以外的地方(比如存储到文件)。

使用<和>来定义输入和输出源。使用>>追加到文件的末尾。

 

sort<terms>terms-alpha
这个命令将terms文件中的条目排序,然后输出到terms-alpha文件。

 

BASH输出重定向文件描述符

0 stdin
1 stdout
2 stderr

 

myprog 2>errfile

将程序myprog的错误信息输出到errfile

 

管道 pipe

 

管道 | 是一个操作符,把输入和输出重定向结合到一起,将一个命令的输出立即作为另一个命令的输入

 

sort<terms>terms-alpha | mail fred
执行前面的操作后,将terms-alpha文件邮寄给fred

以上是关于在linux上单独执行屏幕有输出,重定向后没有任何输出了。 myprog > 1.log 或 myprog tee 1.log的主要内容,如果未能解决你的问题,请参考以下文章

linux输入输出重定向及案例

linux运行交互式脚本输出结果实时屏幕输出的同时重定向到文件,并屏幕和文件中都有时间戳?

Linux中的数据重定向

重定向

Linux重定向与管道

Linux命令执行的屏幕输出内容重定向到日志文件