본문 바로가기

운영체제/리눅스

리눅스 쉘스크립트 작성 오류 \r \m등이 나오는 이유

윈도우에서 작성한 스크립트를 리눅스로 옮겨 실행하고자 하면 명령의 마지막에 ^M가 붙어 파일명이 잘못되거나 하는 등 오류가 생긴다. 

흔히 알고있는 개행문자(CR : Carriage Return)에 의한 것인데...\r 이 그 원인이다.

문제는 윈도우에서 에디트 플러스 등의 에디터로 정규식을 이용해 찾아도 찾을 수 없다는 것.

그렇다고 리눅스에서 vi를 이용해 열어봐도 찾을 수 가 없다.

그땐,

vi -b 스크립트파일명

을 실행해보면 각 문장의 끝에 ^M 이 붙어 있는 것을 확인할 수 있다. ( ^M = \r )



결국 DOS 형태의 텍스트를 UNIX형태로 바꿔주어야 하는 셈이다.

그 명령은 

sed -i -e 's/\r$//' 스크립트파일명

또는

sed -i -e 's/^M$//' 스크립트파일명

단, 아래의 명령 수행시 ^M 은 직접 입력하는 것이 아니라 Ctrl + v 를 입력하고 Ctrl + M을 입력하면 ^M이 입력된다. 이와 같은 형태로 입력하여 실행하면 다시 "vi -b 스크립트파일명"을 해보아도 ^M이 사라진 것을 확인할 수 있고, 스크립트로 정상동작 시킬 수 있다.

정규식에서 $는 문장의 끝, \r 또는 ^M 은 삭제 대상, 즉 문장의 끝에 있는 Carriage Return 문자를 삭제하겟다는 의미이다



출처: https://nexablue.tistory.com/22 [비오는 날]

'운영체제 > 리눅스' 카테고리의 다른 글

RPM 사용법  (0) 2018.10.23