windows에서 작성한 shell파일을 리눅스에 실행하면 오류가 발생할 수 있습니다.

 

아래와 같은 오류가 발생합니다. 

$'\r': command not found 

 

발생 원인은 DOS와 UNIX의 개행 방식이 다르기 때문입니다. 윈도우는 개행 문자를 CR LF를 사용하고 리눅스는 LF를 사용합니다.  CR은 Carriage Return으로 커서를 제일 앞으로 이동합니다.  LF는 Line Feed로 줄 바꿈을 의미합니다. 

정규표현식으로는 각각 \r, \n으로 표현됩니다. 윈도우는 \r\n, 리눅스는 \n입니다. 

리눅스에서 쉘 실행 시 '\r': command not found와 같은 오류가 발생하면 다음 명령어를 실행하면 됩니다. 

 

$sed -i -e 's/\r$//' [대상 파일]

 

 

위 명령어는 정규 표현식으로 $는 라인 끝을 의미합니다. \r$는  라인 끝에 있는 CR문자를 의미합니다. 반대로 UNIX를 DOS 형태로 변환할 때는 다음 명령어를 실행하면 됩니다. 

 

$sed -i -e 's/$/\r' [대상 파일]

 

텍스트 에디터에서 바꾸기를 통해서 변경도 가능합니다. 

 

참고 

https://www.snoopybox.co.kr/1613

 

윈도우에서 작성한 Shell 스크립트 리눅스에서 에러나는 경우

윈도우에서 메모장으로 작성한 Bash 스크립트 파일을 리눅스에 넣어 돌리면 오류가 발생합니다. 그 이유는 DOS와 UNIX 계열의 개행 방식이 서로 다르기 때문인데요, 눈에 보이지는 않지만 각 줄의 �

www.snoopybox.co.kr

http://sql313.com/index.php/blog/62-using-notepad-to-change-end-of-line-characters

 

Using Notepad++ to change end of line characters (CRLF to LF)

End of Line characters include CR or LF.  Windows uses both CRLF at the end of a line, whereas Unix uses only a LF. CR = Carriage Return LF = Line Feed Recently, while troubleshooting why data wont import successfully as part of an automated process, I wa

sql313.com