仮想的にターミナルプログラムにキーストロークを送信する必要があります(例:肉またはEmacs)。
私はこのようなことをしたい:
echo -e 'iHello, world!\e' | vi
それからそこに肉次のバッファーでセッションを開きます。
Hello, world!
~
~
~
~
~
しかし、これはうまくいきません肉キーストロークを読み取れない標準入力。
次のエラーが発生します。
ex/vi: Vi's standard input and output must be a terminal
キーボードから直接入力したように、一部のテキスト文字列をターミナルプログラムに送信するにはどうすればよいですか?
ベストアンサー1
これは一般的にexpect
それ:
expect -c 'spawn -noecho vi; send "iHello World!\r\33"; interact'
普及するexpect
前perl
または以前にTCL用に書かれていますが、現在同様のモジュールpython
~のためperl
またはpython
も可能。
別のオプションは、ttyデバイスでioctlを実行してTIOCSTI
入力キューに文字を挿入することです(一度に1バイト)。
perl -le 'require "sys/ioctl.ph";
ioctl(STDIN, &TIOCSTI, $_) for split "", join " ", @ARGV
' $'iHello World!\r\e'; vi
これは、ターミナルエミュレータとアプリケーション(ここでvi
)の間に追加の疑似ターミナル層を防ぐことができるという利点があります。