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にリダイレクトできます。

答え2

わかりました、私は使うスクリプト(BSDボックスに)捕獲長期実行ジョブの出力またはビルド出力です。これはい、確かに何かに会います。たとえば、マニュアルページでは次のようになります。

-a      Append the output to file or typescript, retaining the prior contents.

見慣れていますか? :)

このオプションは-F pipe可能な解決策を提供できます。しかし、最終的にあなたの質問によると、よくわかりません。スクリプト実際にあなたが探しているものです。

私がリンクしたマニュアルページをチェックしてください。

ファタイ

答え3

プログラムがこの-iオプションを無視すると、直接実行できます。

SHELL=/path/to/your/program script /dev/null > output 

このオプションが混乱している場合は、-iそのオプションのラッパーを作成できます。

$ cat wrapper
#! /bin/sh
exec /path/to/your/program
$ chmod 755 wrapper
$ SHELL=./wrapper script /dev/null > output

関連情報