문제가 무엇인지 알아내야 합니다. 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