Tty

如何在 QNX 中擷取不是標準輸出或標準錯誤(直接到 tty)的輸出?

  • June 15, 2019

我有一個實用程序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。

這是一個執行相同操作的腳本:

#!/bin/sh
echo 'bar' >$(tty)

由於您的script實用程序不能用於foo直接執行(只能通過實用程序啟動的互動式 shell),您必須找到另一種分配新 TTY 以執行命令的方法。

一種這樣的方法是使用ssh

ssh -t localhost "$PWD/foo" >output.log

這將(ab)用於ssh連接到localhost,強制分配 TTY-t並執行foo位於目前目錄中的應用程序。的輸出foo,包括在 TTY 中寫入的所有內容,到標準輸出和標準錯誤,將從 的標準輸出返回給您ssh,然後您可以將其重定向到您想要的任何地方。

引用自:https://unix.stackexchange.com/questions/525035