동일한 코드가 다른 곳에서 작동 할 때 쉘 스크립트가 구문 오류를 제공하는 이유는 무엇입니까?

그 다른 남자

작업 스크립트에서 복사 한 간단한 셸 스크립트가 있습니다. 복사하여 터미널에 붙여 넣으면 작동합니다.

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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관