Solaris 플랫폼에서는 제대로 실행되지만 Linux 플랫폼에서는 작동하지 않는 쉘 스크립트가 있습니다. 실패한 코드 조각은 다음과 같습니다.
[...]
while read line
do
insert_into_table="insert into isam_subrack_tbl (select neId, friendlyName, eqptHolderActualType from $line)"
$MYSQL_HOME/bin/mysql --socket=/tmp/mysql.sock -u$MYSQL_USER -p$MYSQL_PWD --host $MYSQL_HOST -Demlplatform -e "$insert_into_table"
done < isam_subrack2.txt 2> /dev/null
[...]
디버그 모드에서 스크립트를 실행하면 다음과 같습니다.
bash-4.1$ sh -vvx test.sh
[...]
while read line
do
insert_into_table="insert into isam_subrack_tbl (select neId, friendlyName, eqptHolderActualType from $line)"
$MYSQL_HOME/bin/mysql --socket=/tmp/mysql.sock -u$MYSQL_USER -p$MYSQL_PWD --host $MYSQL_HOST -Demlplatform -e "$insert_into_table"
done < isam_subrack2.txt 2> /dev/null
test.sh: line 98: syntax error near unexpected token `done'
'est.sh: line 98: `done < isam_subrack2.txt 2> /dev/null
명령을 시도했지만 dos2unix
도움이 되지 않았습니다.
while 루프에서 왜 이 오류가 발생하는지 아시나요?
답변1
문제에 대한 단서는 다음과 같습니다.
test.sh: line 98: syntax error near unexpected token `done' 'est.sh: line 98: `done < isam_subrack2.txt 2> /dev/null
두 번째 줄은 대개 다음과 같습니다.
test.sh: line 98: `done < isam_subrack2.txt 2> /dev/null'
보시다시피 오류 메시지의 뒤따르는 따옴표는 줄의 시작 부분에 있습니다. 이는 텍스트 파일에 예상치 못한 CR 문자가 나타나는 증상입니다. 이미 파일을 실행하신 것으로 확인되지만 dos2unix
, 다음과 같이 다시 실행하는 것이 좋습니다.
tr -d '\015' < src.sh > dst.sh