動かざることバグの如し

近づきたいよ 君の理想に

シェルスクリプトの対話式入力を自動化する方法

やりたいこと

例えば以下のようなシェルスクリプトがあったとする。

#!/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

この方法で、シェルスクリプトの対話式入力を自動化できる。ファイルに入力データを事前に用意しておくことで、手動入力を省略できる。

参考リンク