次のファイルがあるとしますconfirmation.sh
。
#!/bin/bash
echo -n "Are you sure [Y/n]? "
read line
case "$line" in
n|N) echo "smth"
;;
y|Y) echo "smth"
;;
esac
次のようにスクリプトを実行したいと思います。
cat confirmation.sh | sh
わかりましたAre you sure [Y/n]?
。スクリプトが中断されました。問題は何ですか?
ベストアンサー1
他の人が言ったように、これはパイプから読み取るようにリダイレクトされたため、通常どおり端末に接続されていないためstdin
です。sh
この問題を解決するためにできることの1つは、/dev/tty
強制スクリプトを使用して端末から読むことです。たとえば、
#!/bin/sh
read -p "Are you sure [Y/n]?" line </dev/tty
case "$line" in
y|Y) echo "confirmed"
;;
*) echo "not confirmed"
;;
esac
一般に、人々が入力スクリプトを書くのを特に避けたい場合にのみこれを行います。たとえば、次のようになります。
echo Y | sh confirmation.sh
ユーザーがメッセージが表示されたときに自動的に入力したい場合でも、Y
端末から読みます。これは、これを行うためにパスワードが必要なプログラムで一般的です。