stdoutまたはstderrに(直接ttyに)送信されていないQNXから出力をキャプチャする方法は?

stdoutまたはstderrに(直接ttyに)送信されていないQNXから出力をキャプチャする方法は?

foogrep出力、リダイレクト、またはすべてのプレーンテキスト操作を実行したいユーティリティがあります。思いやり!それが何をしているのか見てください...

$ foo
bar
$ foo > /dev/null
bar
$ foo 2> /dev/null
bar
$ foo | grep abc
bar
$ foo 2| grep abc
bar

明らかに出力はstdout両方ありませんstderrfoostdoutの代わりに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

ベストアンサー1

はい、fooアプリケーションはTTYに直接書き込むことができます。

同じタスクを実行するスクリプトは次のとおりです。

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

ユーティリティは実行に直接使用scriptできないためfoo(ユーティリティによって開始された対話型シェルを介してのみ)コマンドを実行するには、新しいTTYを割り当てる別の方法を見つける必要があります。

1つの方法は、次のものを使用することですssh

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

これは(ab)sshに接続しlocalhost、割り当てられたTTYを強制的に使用し-tfoo現在ディレクトリにあるアプリケーションを実行します。fooTTY、標準出力、および標準エラーに記録されているすべての内容を含む、出力は標準出力から返され、任意の場所sshにリダイレクトできます。

おすすめ記事