기타

2022.02.11 19:18

개행문자로 인한 shell script 오류 해결방법

  • 비아웹 오래 전 2022.02.11 19:18 인기
  • 3,004
    0

기존에 잘 사용하던 쉘 스크립트가 command not found 뜨거나 정상적으로 접속되던 로그인이 세션이 끊기면서 접속이 되지 않거나 하면 여러가지 원인이 있겠지만 그 중 하나 이 오류에 대해서도 의심을 해볼 수 있습니다.

이 오류가 발생하는 원인은 Window에서 작성되거나 수정을 한 파일을 Linux로 옮겼을 때 발생 할 수 있습니다.

각 줄의 마지막에는 개행을 위한 문자가 들어있는데 이 파일이 Window에서는 CRLF가 개행인데 Linux에서는 LF가 개행이라 나타나는 현상 입니다.

아래에 몇가지 해결방법을 정리 하였으니 참고 하시길 바랍니다.

* CR (Carriage Return) : 커서의 위치를 앞으로 이동

* LF (Line Feed) : 현재 위치에서 바로 아래로 이동

* ^M은 Shift+6, 대문자 M이 아니라 ctrl + v + M 입니다.

예시 화면

vi 편집기로 파일을 열었을 때 ^M을 확인 할 수 있다.

※만약에 vi 편집기로 열었을 때 보이지가 않는다면 vi -b로 파일을 열면 확인이 가능하다.

제거하는 방법

1. vi (가장 많이 사용하는 방법)

# 삭제 1 :%s/^M// 2 :%s/\015// 3 :set fileformat=unix(set ff=unix) (입력 후 저장하고 나갔다가 파일 다시 열면 변경되어 있는걸 확인 할 수 있습니다.

2. sed

# 삭제 [viaweb@localhost]# sed 's/^M//g' example.log # 변경된 내용 저장 [viaweb@localhost]# sed -i 's/^M//g' example.log # 확인 [viaweb@localhost]# cat example.log viaweb hosting server test

3. tr

# 삭제 [viaweb@localhost]# tr -d '^M' < example.log # 변경된 내용 저장 [viaweb@localhost]# tr -d '^M' < example.log > example.check.log # 확인 [viaweb@localhost]# cat example.check.log viaweb hosting server test

4. awk

# 삭제 [viaweb@localhost]# awk 'sub(/\015/,"");' example.log # 변경된 내용 저장 [viaweb@localhost]# awk 'sub(/\015/,"");' example.log > example.check.log # 확인 [viaweb@localhost]# cat example.check.log viaweb hosting server test

5. perl

# 삭제 [viaweb@localhost]# perl -p -e 's/\015//g' example.log # 변경된 내용 저장 [viaweb@localhost]# perl -pi -e 's/\015//g' example.log

6. dos2unix

# 설치 [viaweb@localhost]# yum -y install dos2unix # 사용방법 [viaweb@localhost]# dos2unix [파일명]

※ 명령어 풀이

%s : 문자열을 치환

%s/^M : ^M 문자열을 치환

%s/^M// : ^M 문자열을 공백으로 치환

%s/^M//g : 해당 문서 전체 ^M 문자열을 공백으로 치환

\015 : 줄바꿈 문자 로16 진법으로 표현


감사합니다.

서버호스팅 비아웹

  • 공유링크 복사

    댓글목록

    등록된 댓글이 없습니다.