やりたいこと
例えば以下のようなシェルスクリプトがあったとする。
#!/bin/bash # ユーザーからの入力を受け取る read -p "aを入力してください: " input_a read -p "bを入力してください: " input_b read -p "cを入力してください: " input_c if [ "$input_a" = "a" ] && [ "$input_b" = "b" ] && [ "$input_c" = "c" ]; then echo "OK" else echo "NG" exit 1 fi
この場合、a入力してエンター、b入力してエンター、c入力してエンターする。
❯ bash test.sh aを入力してください: a bを入力してください: b cを入力してください: c OK
通常実行時に入力を求められるLinux操作は珍しくないが、自動化しようとすると面倒
yコマンドだけ実行したいなら yes > bash hoge.sh
でも対応できるが複数入力しなくてはいけない対話式のコマンドの場合対応できない。
対応方法
シェルスクリプトの対話式入力を自動化するには、入力データをファイルに保存し、そのファイルをリダイレクトする方法が有効。以下の手順で実行できる。
入力データをファイルに保存する。例えば、cmd.txt
というファイルを作成し、以下の内容を記述する。
a b c
シェルスクリプトを実行する際に、このファイルをリダイレクトする。
❯ bash test.sh < cmd.txt OK
この方法で、シェルスクリプトの対話式入力を自動化できる。ファイルに入力データを事前に用意しておくことで、手動入力を省略できる。