標準入力がリダイレクトされたときに入力を要求したときに機能するスクリプトを取得しようとしています。不可能かもしれませんが、その理由を知りたいです。例は次のとおりです。
$ echo 'q = raw_input("question ?"); print "\ngot: ", q' | python - < <(echo answer)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'answer' is not defined
私はそれを動作させることができることを知っています。
$ python <(echo 'q = raw_input("question ?"); print "\ngot: ", q') < <(echo answer)
question ?
got: answer
しかし、これはプロセスの代替です。リダイレクトだけで動作させることはできますか?
ベストアンサー1
おそらく。 1つの方法は、TTYを開いて対話することです。
#!/usr/bin/env expect
package require Tcl 8.5
gets stdin line; puts "stdin: $line"
set tty [open /dev/tty r+]
chan configure $tty -buffering none
puts -nonewline $tty "nimi sina li seme? "
set name [gets $tty]
gets stdin line; puts "stdin: $line"
puts $tty "name: $name"
したがって上記の結果は./prompt
、、chmod +x
インストールされたexpect
などに保存されます。
$ (echo foo; echo bar) | ./prompt
stdin: foo
nimi sina li seme? Bob
stdin: bar
name: Bob
$