我有一个实用程序foo
,我想从中 grep 输出、重定向或执行所有正常的文本操作。可惜!看看它的作用...
$ foo
bar
$ foo > /dev/null
bar
$ foo 2> /dev/null
bar
$ foo | grep abc
bar
$ foo 2| grep abc
bar
显然输出既不是stdout
也不是stderr
。也许foo
直接对 tty 而不是对标准输出的权利。这里有一个答案,它提供了一种使用script -c
. 但又是一次!
$ script -c foo > /dev/null
script: illegal option -- c
usage: script [-a] [file]
也许我的script
实用程序不是完整版。操作系统是QNX。
对于我们这些无法使用script -c
解决方法的人,我们如何轻松捕获输出?如果有任何意义,有没有办法重定向 tty 文件本身?
有可能做类似的事情foo (/dev/ttyp0)| grep abc
吗?这可能不会完全如图所示,但有没有办法做类似的事情?要求首先重定向文件(如果可能的话)的答案很好,所以类似的东西/dev/ttyp0 please go to /dev/null ; foo
是可以的。
最终,我希望能够将输出通过管道foo
传输到grep
和/或将foo
输出重定向到文件。
是的,
foo
应用程序很可能直接写信给 TTY。这是一个执行相同操作的脚本:
由于您的
script
实用程序不能用于foo
直接执行(只能通过实用程序启动的交互式 shell),您必须找到另一种分配新 TTY 以执行命令的方法。一种这样的方法是使用
ssh
:这将(ab)用于
ssh
连接到localhost
,强制分配 TTY-t
并运行foo
位于当前目录中的应用程序。的输出foo
,包括在 TTY 中写入的所有内容,到标准输出和标准错误,将从 的标准输出返回给您ssh
,然后您可以将其重定向到您想要的任何地方。好的,我使用脚本(在 BSD 机器上)来捕获长时间运行的作业的输出,或构建输出。这就是,我相信你遇到了什么。例如,从手册页:
看起来熟悉?:)
该选项
-F pipe
可能会为您提供可能的解决方案。但最后,我不太确定,从你的问题来看,那个脚本实际上是你要找的。看看我链接到的手册页。
高温高压
如果您的程序忽略该
-i
选项,您可以直接运行它如果它阻塞了该
-i
选项,您可以为它创建一个包装器。