プログラムの起動直後に標準入力またはキーコードを送信する必要があります。
例えば
$ 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
stdin をパイプに置き換えることもできますが、そのアプリケーションがF3キーの押下などを想定している場合は、対話型アプリケーションである可能性が高いため、stdin がターミナルでないとうまく機能しない可能性があります。とにかく、試してみることができます。
tput kf3 | program
しかし、program
が の出力を読み取った後tput
、ファイルの終わり (読み取るものがもうない) が検出され、終了する可能性があります。次のように記述します。
{ tput kf3; cat; } | program
の出力を送信しkf3
、その後、を使用してcat
、ターミナルに入力したすべての内容を に転送します。ただし、入力が入力と同時に送信されるモードにターミナルが設定され、 の入力がターミナルではないため が実行できなくなるため、これがprogram
機能する可能性は低いです。program
echo
あなた自身でも同じ設定を行うことができます:
saved_settings=$(stty -g)
stty -icanon -echo min 1 time 0
{ tput kf3; cat; } | program
stty "$saved_settings"