パイプを介して標準入力を送信する方法

パイプを介して標準入力を送信する方法

プログラムが開始されるとすぐに、標準入力またはキーコードを送信する必要があります。

例えば

$ program | F3

ベストアンサー1

あなたは定義する必要がありますスタートそこに。

F3端末デバイス入力バッファを押すと、端末から送信された一連の文字を挿入できます。今後Linuxなどの一部のシステムでプログラムを実行するには、TIOCSTI ioctl()を使用します。

{
   perl -le 'require "sys/ioctl.ph";
   ioctl(STDIN, &TIOCSTI, $_) for split "","@ARGV"' "$(tput kf3)"
   program
}

あるいは、このようなものを使用して、偽の端末層expectでプログラムを実行し、プロンプトが出力されるのを待つこともできます。ここに行く予想される範囲内で) その後、その出力を送信します。

expect -c 'spawn -noecho program; expect {>} {send [exec tput kf3]}; interact'

>(ここでは、入力を読む準備ができたら、いくつかの文字列出力に置き換えられるように求められます。)program

標準入力をパイプに変更することもできますが、アプリにF3キーストロークなどが必要な場合は対話型アプリである可能性が高く、標準入力が端末でない場合は気に入らない可能性があります。とにかく、いつでも次のことを試すことができます。

tput kf3 | program

ただし、program出力を読み取った後は、tputファイルの終わり(これ以上読み取れない)が表示され、終了することがあります。そして:

{ tput kf3; cat; } | program

その後、私たちが送信する出力は、端末に入力したすべての内容をに渡すためにkf3使用されます。その後、入力が端末ではないため、端末を入力して無効にするとすぐに、端末をもう何もできないモードに切り替える可能性が高いため、機能しません。catprogramprogramecho

同じ設定を直接実行できます。

saved_settings=$(stty -g)
stty -icanon -echo min 1 time 0
{ tput kf3; cat; } | program
stty "$saved_settings"

おすすめ記事