작업 스크립트에서 복사 한 간단한 셸 스크립트가 있습니다. 복사하여 터미널에 붙여 넣으면 작동합니다.
if true
then
true
fi
그러나로 스크립트를 실행 bash myscript
하면 일부 키워드가 누락 된 것처럼 다양한 구문 오류가 발생합니다.
myscript: line 4: syntax error near unexpected token `fi'
, 마치 then
없는 것처럼 .myscript: line 6: syntax error: unexpected end of file
, 마치 fi
없는 것처럼 .myscript: line 4: syntax error near unexpected token `$'\r'
.. 뭐?이 특정 스크립트에서는 발생하지만 명령 줄이나 복사 한 스크립트에서는 발생하지 않는 이유는 무엇입니까?
요약 : 스크립트에는 Windows 스타일 CRLF 줄 끝 (일명 \r\n
.
\n
캐리지 리턴을 삭제하여 Unix 스타일 로 변환하십시오 .
다음 ^M
의 출력에서와 같이 감지 할 수 있습니다 cat -v yourscript
.
$ cat -v myscript
if true^M
then^M
true^M
...
Unix 라인 엔딩 (일명 "줄 종결 자"또는 "줄 끝 문자")으로 파일을 저장하도록 편집기를 설정하고 다시 저장합니다.
당신은 또한으로 명령 줄에서 제거 할 수 있습니다 dos2unix yourscript
또는 cat yourscript | tr -d '\r' > fixedscript
.
캐리지 리턴 문자는 bash에 대한 또 다른 문자입니다. then
동일하지 않습니다 then\r
, 그래서 배쉬는 키워드로 인식하지 않으며 명령입니다 가정합니다. 그런 다음 계속해서 찾고 then
실패합니다.
뒤에 뒤에 공백이 then
있으면 fi
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다