シェル スクリプトで y/n の回答を求めています。入力を行う前にプロンプトで、シグナル処理関数を呼び出す control-c シグナルを使用しました。シグナル処理関数には、終了するためのプロンプト「q」または「y」があり、最初の読み取りプロンプトで「y」を使用する必要があります。
(( echo "y" | read )) を試しましたが、うまくいきませんでした
これは私のスクリプトの一部です:
IntHandle ()
{
echo -e "\nUse 'q' to quit "
read var1
if [[ $var1 == q ]]
then
exit 1
else
echo "y" | read ----->here I need "y" to be an input to read prompt
directly and being saved in "ans" variable in
main body where I used control-c
fi
}
trap 'IntHandle' SIGINT
read -p "no valid user id entered, new user ids? [y\n]: " ans ----> here
used control-c signal before give y/n to ans
if [[ $ans == "y" ]]
then
read -p " username :" name
fi
.
.
.
.
。
出力は以下のようになります:
有効なユーザーIDが入力されていません。新しいユーザーIDを入力してくださいか? [y\n]: #control-c が入力されました
' 終了するには 'q' を使用します ' y ------> ここで、シグナル処理関数で "q" ではなく "y" が入力され、それが "ans" 変数に保存され、条件が true になるとユーザー名の入力を求められます。
ユーザー名: Larry -----> 条件が true の後に入力される名前。 . . .
答え1
これは XY 問題です。read
スクリプトで変数を設定するために、一体なぜ を使用するのでしょうか?
通常の方法で設定します。ans=y
関数は次のようになります。
IntHandle ()
{
echo -e "\nUse 'q' to quit "
read var1
if [[ $var1 == q ]]
then
exit 1
else
ans=y
fi
}