Bashに「q」と入力すると、読み込みを停止する方法は?

Bashに「q」と入力すると、読み込みを停止する方法は?

readいくつかのタスクを実行するためにユーザー入力を使用しています。セレクタは、ユーザーがENTER入力した後に押す必要なく適切な情報を印刷するために2文字のテストを使用します。q2文字のセレクタで構成されていないため、終了する値を許可できますか?

  local done="false"
  while [ "$done" != "true" ]
  do
    echo ; read -n 2 lsk
    case $lsk in
     "1L")
        echo "$navaid_vscal"
        echo -e "$tacrgm"
        ;;
     q)
        done="true"  # ends while loop
        echo -n "$sgr"
        ;;
     *)
        ## repeats while do
        ;;
    esac
  done

ベストアンサー1

read私は組み込みのbashにこの機能があるとは信じていません。ただし、カスタム読み取りを実装できます注文するまたは機能これを達成するために。

たとえば、次の機能を使用できます。

read_or_quit(){
x=0;
while ((++x<=2)); do 
   read -n 1

   if [[ $REPLY = q ]]; then 
      echo q
      break
   else 
     echo -n "$REPLY"
   fi
done ; 
echo

# I thought that printing `echo` to `stdout` would
# append a new line which might break the `case` 
# functionality.
# echo >&2
}

$(read_or_quit)以下を使用してコードからこの関数を呼び出すことができます。

local done="false"
  while [ "$done" != "true" ]
  do
    lsk=$(read_or_quit)
    case $lsk in
     "1L")
        echo "$navaid_vscal"
        echo -e "$tacrgm"
        ;;
     q)
        done="true"  # ends while loop
        echo -n "$sgr"
        ;;
     *)
        ## repeats while do
        ;;
    esac
  done

おすすめ記事