何かをビルドし、プロンプトを介して対話型シェルを提供するコマンドがあります(たとえば、再起動するにはR入力、終了するにはQ入力など...)。
コマンドを使用したいのですが、プロンプトセクションに達したら停止します。コマンドを呼び出すときに「Q」パラメータを渡したり、プロンプトに到達した後に終了する方法はありますか?
答え1
スクリプトが「normal」を介して入力を読み取る場合は、read
他のプログラム(パイプなど)を使用して事前入力を提供できます。echo
printf
echo Q | your-program-here
より複雑な例は次のとおりです。
(echo 1; echo thing2; echo yes; echo Q) | your-program-here
より複雑な自動入力スクリプトを完成させるために、同様のプログラムを使用することも可能です。予想される。
答え2
コマンドが対話型入力を待たないようにするには、入力をどこかでリダイレクトするだけです。説明するようなほとんどのプログラムは標準入力の終わりに達すると終了しますので、プログラムが初期操作を実行する以外に何もしないようにするには、空の入力を渡します。
thatcommand </dev/null
実際に固定入力を渡すには、次を使用できます。ここのドキュメント。
thatcommand <<EOF
Q
EOF
ここでは、ドキュメントに変数を含めることもできます。入力をより動的に設定する必要がある場合は、必要なシェルコードをパイプできます。
{
# complex shell code goes here
echo Q
} | thatcommand
私はプログラムが標準入力から読み取ると仮定します。一部のプログラムは端末から強制的に読み取られるため、入力リダイレクトは機能しません。このような場合は、このようなツールが必要です。予想される。 Expect は、前の出力に依存するプログラムに入力が必要な場合にも便利です。