。

シェル スクリプトで 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
}

関連情報