在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
就是有问题啊,单独执行屏幕上有输出,用了重定向,屏幕和文件都没有输出了。
其他程序是可以的。而且用了2 >&1
大概是什么原因?
抱歉,么仔细看题目,原来已经用了 tee 了啊。。难道 myprog 编程时不是用的标准输出?
追问有哪些可以打印到屏幕的情况?有可能不是标准输出,但是确实可以显示到屏幕上
追答对这个没什么研究,等下看是否有大神吧。我觉得如果程序直接操作输出缓冲区就能跳过标准设备,老早之前在DOS时代的时候,也有很多非字符的游戏,就是这么做的。
追问没有cout<<flush,这是原因
追答怪异哈,应该碰到回车或者缓冲区满了会自动flush的,否则屏幕咋能看到输出呢。
学习了!同样感谢您能回来告知原因。
查看你的1.log文件看看里面的内容
还有你的mypro程序是自己写的吧
标准输出由于缓冲区的原故在重定向时会等到缓冲区满后才会写入
所以你的mypro程序执行完后再看看你的1.log文件 参考技术C 可能是后面的指令被程序当作参数读取了,然后工作不正常。
Linux重定向与管道
重定向 redirection
每个命令有输入源和输出目的地,默认行为,是标准输入和标准输出。大多数情况,标准输入是键盘,标准输出是屏幕。可以为单独的操作修改输入和输出,这就是重定向。重定向可以使某个命令从源文件输入而不是键盘,或输出到显示器以外的地方(比如存储到文件)。
使用<和>来定义输入和输出源。使用>>追加到文件的末尾。
sort<terms>terms-alpha
BASH输出重定向文件描述符
0 | stdin |
1 | stdout |
2 | stderr |
myprog 2>errfile
将程序myprog的错误信息输出到errfile
管道 pipe
管道 | 是一个操作符,把输入和输出重定向结合到一起,将一个命令的输出立即作为另一个命令的输入
sort<terms>terms-alpha | mail fred
以上是关于在linux上单独执行屏幕有输出,重定向后没有任何输出了。 myprog > 1.log 或 myprog tee 1.log的主要内容,如果未能解决你的问题,请参考以下文章