tee
stdinから読み込み、入力ストリームをstdoutとファイルに分割することで動作します。
プロセスの標準入力と同様の操作を実行しようとしています。コマンドの標準入力がまだttyまたは擬似端末に接続されており、ファイルなどの任意のソースから入力を受け取ることができるようにしたいです。
さまざまなパイプトリックとIOリダイレクトを試みましたが、stdinを端末として使用するプログラムに必要なシナリオを複製することはできません。
不可能かもしれませんが、お聞きしたいと思いました。
答え1
select()
ttyとは異なるソースを呼び出し、両方のソースから何でも読み取るプログラムを書くことができます。ただし、他のソースがファイルの場合は意味がありません。入力を待たずに常にファイルをすぐに読み取ることができます。したがって、結果はファイルを最初に処理し、次にtty入力を処理するか、その逆を処理します。 (ファイルが非常に大きく、実際に測定可能な時間ディスクを待つ必要がある場合は除外されます。)
ファイルを最初に読んでから、tty入力/stdinを読んでくださいcat file -
。
答え2
あなたのシナリオでファイルがどのように関連しているのかわかりません。パイピングstdinは一時ファイルを読み取るか、メモリに保存してから、次の方法でttyアクセスを復元できます。
#!/usr/bin/env expect
package require Tcl 8.5
package require fileutil
set tmpfile [::fileutil::tempfile]
while {[gets stdin line] >= 0} {
puts $tmpfh $line
}
close stdin
open /dev/tty r+
# and here the remainder of the program can interact with the terminal,
# and read from the $tmpfile as necessary
私はこの方法を使いますfeed
REPLの標準入力次に、このREPLを対話型の使用に変換します。
$ echo '(print "hello")' | feed - sbcl --noinform
* (print "hello")
"hello"
"hello"
* (quit)
(quit)
$