Select 및 if-else 문의 Case에는 이중 입력이 필요합니다.

Select 및 if-else 문의 Case에는 이중 입력이 필요합니다.

문제가 무엇인지 알아내야 합니다. if/else 문에서 사용자에게 예/아니요 선택을 요청하는 스크립트를 작성해야 합니다. 일반적으로 다음과 같이 실행되는 bash 스크립트가 있습니다.

if CONDITION; then
    COMMANDS1
else
    COMMANDS2
    echo "Does this look okay to you? (WARNING: This action will not be recoverable!) :          
    PS3="Select a number: "
    select yn in "Yes" "No"
    do
          case $yn in
               "Yes" )
                echo "Ok!" ; break ;;
                "No" )
                echo "Aborted!" ; break ;;
          esac
    done
fi

하지만 스크립트를 실행하면 다음과 같이 표시됩니다.

Does this look okay to you? (WARNING: This action will not be recoverable!)
1) Yes
2) No
Select a number: (I have to press anything here)
Select a number: (Only this input does something).

sh -vx를 사용하여 스크립트를 실행하면 select와 case가 각각 실행되는 것으로 표시됩니다. 하나의 입력만 필요한지 어떻게 확인하나요?

+ echo 'Does this look okay to you? (WARNING: This action will not be recoverable!) : '
Does this look okay to you? (WARNING: This action will not be recoverable!) : 
+ PS3='Select a number: '
+ select yn in '"Yes"' '"No"'
1) Yes
2) No
Select a number: 1
+ case "$yn" in
Select a number: 2
+ case "$yn" in
+ echo 'Aborted!'
Aborted!
+ break

매우 감사합니다!

편집: 저는 Mac OS 14.1에서 bash를 실행하고 있습니다.

답변1

나를 위해 작동합니다. stdin일부 입력을 추가하는 이전 입력과 (중요하게) 개행 문자 에 남은 텍스트가 있는 것 같습니다 .

기본값을 추가 *하고 에 저장된 내용을 인쇄할 수 있습니다 REPLY. 보류 중인 항목을 식별하기 위해 이를 눈에 보이는 형식으로 표시하고 싶을 수도 있습니다.

( * ) printf '%s' "${REPLY}" | od -A n -t x1ac;;

여러 단어가 여기서 무엇을 할 것인지 "$yn"잘 모르기 때문에 인용하겠습니다 .case

관련 정보