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
stdoutの代わりに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を強制的に使用し-t
、foo
現在ディレクトリにあるアプリケーションを実行します。foo
TTY、標準出力、および標準エラーに記録されているすべての内容を含む、出力は標準出力から返され、任意の場所ssh
にリダイレクトできます。
答え2
答え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