2021. 3. 1. 15:02ㆍIT/S . e . v . e . r . I . n . f . r . a
기본적으로 개발환경 및 서버 머신을 맥과 리눅스를 사용하고 있다.
보통 스크립트 작성을 하거나 프로그래밍을 할 때 맥에서는 VSCode를 사용하고
터미널상에서는 리눅스든 맥이든 vi를 통해 프로그래밍을 하고 있다.
사내에서 관리용 스크립트는 github에 올려놓고 몇 명이 협업과 리뷰를 하고 있는데
어느 날 지금까지 문제없이 사용하던 쉘 스크립트가 갑자기
command not found 로 시작하는 오류를 뱉으면서 실행이 안되는 것이다.
코드상으로는 아무런 문제가 없어서 다시 한 번 실행을 해봐도 같은 증상으로 실행이 안되는 것이었다.
같이 협업하는 사람들이 사용하는 PC는 모두 윈도우즈 기반의 머신이어서
혹시나하고 확인해보니 줄바꿈에 문제가 있었던 것이다.
이런 문제가 생기는 이유는 운영체제별 개행방식의 차이때문이다.
윈도우즈는 줄바꿈시 CRLF(Carriage Return Line Feed)를 사용하고
리눅스나 맥의 경우는 LF(Line Feed)만을 이용한다.
여기서 CR은 Carriage Return을 말하며 커서를 제일 앞으로 보내는 역할을 하고
LF는 Line Feed를 말하며 줄바꿈을 의미한다
리눅스나 맥에서 작성한 파일을 윈도우에서 메모장으로 열어보면 줄이 전부 붙어있고
대신 마지막 문장 끝에 이상한 문자가 보이게 된다
반대로 윈도우에서 작성한 파일을 리눅스나 맥에서 열어보면 눈에 보이지는 않지만
끝에 CR이 쓸데없이 붙어 있어, Shell 스크립트 파일을 돌리면 오류가 발생하는 원인이 된다
이런 경우 해결방법이 여러가지 있겠지만 vi로 간단히 해결할 수 있는 방법이 있다.
먼저 보이지 않는 캐리지 리턴을 보이게 하기 위해
vi -b 스크립트이름
로 파일을 불러오면 각 명령어 끝줄에 ^M 가 박혀있는걸 볼 수 있다
그리고는 vi에서 ESC로 커맨드 모드에 진입한 다음 아래 명령어를 입력하고 실행해주면
깨진 개행문자를 공백으로 치환해주게 된다.
:%s/^M/ /g
여기서 ^M은 컨트롤+v 와 컨트롤+m 을 누르면 된다.
'IT > S . e . v . e . r . I . n . f . r . a' 카테고리의 다른 글
gzip을 멀티코어를 사용해 압축해보자 (0) | 2021.03.01 |
---|---|
쉘 스크립트 변수 뒤에서부터 자르기 (0) | 2021.03.01 |
현재디렉토리의 숨김파일 포함 압축 (0) | 2021.03.01 |
쉘 스크립트로 액세스로그에서 날짜별 액세스 수 추출하기 (0) | 2021.02.18 |
if문에서 영문 숫자 구별하기 (0) | 2021.02.08 |
if문의 조건의 문자열 일부 매칭 (0) | 2021.02.08 |