if 문의 잘못된 공백으로 인해 "명령을 찾을 수 없음" 오류가 발생하는 유사한 게시물을 본 적이 있습니다.
빈 오류를 찾을 수 없습니다. 그들은 어디에 있나요? 또 무엇이 있을까요?
기본적으로 플래그(아래) 없이 test.sh를 실행하면 터미널에서 "명령을 찾을 수 없습니다"와 같은 무례한 외설적인 소리를 지르기 시작합니다. 로고를 사용하면 매우 효과적입니다. 나는 bash에 플래그를 계속 매수하고 싶지 않습니다. 이는 장기적인 건강에 해롭습니다.
이 시간은테스트 파일:
verbose='false'
aflag=''
bflag=''
sflag=''
files=''
while getopts 'absf:v' flag; do
case "${flag}" in
a) aflag='true';;
b) blag='true' ;;
s) sflag='true' ;;
f) files="${OPTARG}" ;;
v) verbose='true';;
*) error "Unexpected option ${flag}" ;;
esac
done
# ======= Below this is where the error gets thrown
if "$sflag" ;
then
echo "okay" ;
fi
# ======= end error throwing code
echo "end" # this prints just fine
위의 스크립트를 실행합니다.
$ bash test.sh
그럼 난 다시 올게
test.sh: line 17: : command not found
end
Bash가 합리적으로 행동하도록 설득하는 방법에 대해 조언을 줄 수 있는 사람이 있나요?
저는 Mac을 사용하고 있습니다(이것이 중요한지 모르겠습니다).
답변1
오류는 플래그를 전달하지 않아 전체 while getopts
루프가 실행되지 않는다는 것입니다. $sflag
루프는 비어 있으므로 bash가 실제로 실행되는 것은 다음과 같습니다.
if ""; then echo "okay" ; fi
가장 간단한 해결책은 변수를 false로 초기화하는 것입니다.
verbose='false'
aflag='false'
bflag='false'
sflag='false'
files='false'
while getopts 'absf:v' flag; do
case "${flag}" in
a) aflag='true';;
b) blag='true' ;;
s) sflag='true' ;;
f) files="${OPTARG}" ;;
v) verbose='true';;
*) error "Unexpected option ${flag}" ;;
esac
done
# ======= Below this is where the error gets thrown
if "$sflag" ;
then
echo "okay" ;
fi
# ======= end error throwing code
echo "end" # this prints just fine