web-dev-qa-db-ja.com

Bashでシミュレートされたキーストロークを送信する

私は最近、bashで私のc ++プログラムを自動化するに使用できるスクリプトを作成しようとしています。 AutoItをご存じの場合は、私がやろうとしていることの例を示すだけです。

send("1{enter}")

または

send("!a")

OK AutoItを話さない人のために:

最初の例は、シミュレートされた「1」キーストロークを送信し、その後にenter(CR)を送信します。

2番目の例はalt-aを送信します

私は具体的にbashでこれを実行しようとしています。 他のスクリプト言語では実行できません

また、私はnotがspoonfeedを好みます。 書き方を明記してください。私のためにスクリプトを書くことは許可されていません。

19
Ishan

プログラムの標準入力にテキストをフィードするには、 パイプおよび/またはリダイレクト を使用します。

echo 1 | myprogram

(echo "First line"
 echo "Second line") | myprogram

myprogram <<EOF
First line
Second line
EOF

インタラクティブなCLIプログラムの場合(notfull-terminal ones)、名前付きパイプまたは coprocesses を一種の貧乏人のexpect(Tclであるため除外した):

mkfifo in out
myprogram <in >out &
echo "First line" >in
read -r reply <out

mkfifo in out
myprogram <in >out &
exec {infd}>in {outfd}<out
echo "First line" >&$infd
read -r reply <&$outfd

coproc foo { myprogram; }
echo "First line" >&${foo[1]}
read -r reply <&${foo[0]}

(出力パイプから読み取るときは注意してください。例:head -1 <outは1行だけを読み取るのではなく、1つの完全な4kブロックをバッファリングし、1行を印刷し、残りを破棄します。)

16
user1686

xdotool を探しています。

xdotoolのコマンド例に相当するものは次のとおりです。

xdotool key 1 Return
xdotool keydown Alt key a keyup Alt
16
Dennis