본문 바로가기

Computer Science/OS

[Linux] CRLF vs LF

반응형

리눅스에서 스크립트를 실행하려고 하다보면 아래와 같은 에러가 발생하는 경우가 있다.

 

$'\r': command not found

 

스크립트를 열어보면 다른 특수문자나 오타는 없는데 이러한 에러가 나는 것이 이상했다. 검색해보니 윈도우와 리눅스에서 사용하는 개행문자와 관련된 형식의 차이로 발생하는 문제였다. 이와 관련해서 글에서 정리해본다.

1. CR + LF

CRLF Carriage Return (CR) Line Feed (LF) 두가지 단어를 합친 용어이다. 용어들은 예전 타자기에서 유래한 단어로 타자기에서 줄을 종이를 간격만큼 올려주는 행위 (LF, Line Feed) 커서를 앞으로 돌리는 행위 (Carriage Return) 에서 기반한 용어이다.

 

프로그래밍 언어에서 CR '\r' LF 우리가 아는 개행문자인 '\n' 으로 사용된다.

2. CRLF vs LF

새로운 행으로 이동할 , 과거의 타자기와 달리 프로그래밍 언어에서는 커서를 앞으로 되돌릴 필요가 없다. 이때문에 Unix 기반 OS 들은 개행 문자로 LF (\n) 만을 사용한다. 반면에 Windows OS 전통적인 방식 그래도 CRLF (\r\n) 사용한다.

 

이때문에 윈도우에서 작성한 스크립트를 그대로 리눅스에서 사용하면 \r\n 중에서 \n 개행문자로 인식된다. 그렇다면 남은 \r 특정한 명령어로 인식되는데 이에 매핑되는 명령어가 없기 때문에 글의 서두와 같이 'command not found' 에러가 발생하는 것이다.

- 해결법

문제를 해결하는 방법은 간단하다. 의미없는 CR 문자인 '\r' 모두 제거하면 되는 것이다. 해결법은 크게 다음의 2가지가 있다.

1) sed \r 치환

$ sed -i 's/\r$//' {파일명}

 

Linux 에서 위의 명령어를 사용하여 '\r' 문자를 모두 치환해주어 문제를 해결한다.

2) dos2unix

$ sudo apt-get install dos2unix
$ dos2unix {파일명}

 

Windows 에서 작성한 텍스트 파일을 Unix 기반에서 사용 가능 하도록 변환해주는 유틸 패키지를 사용하는 방법도 있다. dos2unix 설치 , 변환하고자 하는 파일에 사용하면 대상 파일을 Unix 파일 포맷으로 변경해준다.

 

[Reference]

- https://m.blog.naver.com/taeil34/221325864981

 

CR(\r), LF(\n)이란 무엇인가?

프로그래밍을 하다 보면 문자열의 줄 내림을 위해서 \n을 쓰는 경우가 있을 것이다. 그런데 윈도우즈에서 ...

blog.naver.com

 

- https://hbcho-coding.tistory.com/5

 

$'\r': command not found 에러 해결법 (리눅스)

윈도우에서 스크립트를 작성하고 리눅스에 실행하면 아래와 같은 에려가 발생한다. $'\r': command not found 위 에러는 윈도우와 리눅스의 개행문자 (New line)가 달라서 생기는 문제이다. 윈도우에서는

hbcho-coding.tistory.com

 

반응형

'Computer Science > OS' 카테고리의 다른 글

[Linux] systemd, service, systemctl  (0) 2025.03.27
[OS] Memory Management  (0) 2021.10.23
[OS] Thread & Multithreading  (0) 2021.10.22
[OS] Process Synchronization  (0) 2021.10.22
[OS] CPU scheduling  (0) 2021.10.21