본문 바로가기

리눅스

[draft] Shell 스크립트에서 CRLF와 LF 문제를 해결하는 방법

Shell 스크립트에서 CRLF(Carriage Return Line Feed)와 LF(Line Feed) 문제를 해결하는 방법

CRLF는 Windows 시스템에서 사용되는 줄 끝 표시 방식이고 LF는 Unix/Linux 시스템에서 사용됩니다.

CRLF와 LF란 무엇인가?

CRLF(Carriage Return, Line Feed)

  • Windows에서 일반적으로 사용되는 개행 문자입니다.
  • 문자열의 끝을 나타내는 데 CR(\r)과 LF(\n) 두 개의 문자를 사용합니다.

LF(Line Feed)

  • Unix/Linux 시스템에서 일반적으로 사용되는 개행 문자입니다.
  • 문자열의 끝을 나타내는 데 LF(\n) 한 개의 문자를 사용합니다.

CRLF 문제 발생 시 증상

일반적으로 CRLF 문제는 스크립트를 실행할 때 다음과 같은 오류 메시지가 나타나는 것으로 확인할 수 있습니다.

bash: command not found
unexpected end of file
bad interpreter: No such file or directory

특히 shebang(#!/bin/bash) 줄에 CRLF가 포함된 경우 존재하지 않는 인터프리터로 인식하여 오류가 발생합니다.

CRLF 문제 확인 방법

file 명령어로 확인

file your_script.sh
your_script.sh: Bourne-Again shell script, ASCII text, with CRLF line terminators
  • CRLF 사용 중

해결 방법

1. dos2unix 사용하기

dos2unix 명령어는 CRLF를 LF로 변환하는 데 사용할 수 있는 유틸리티입니다. 이 도구는 일반적으로 Linux 배포판에서 기본적으로 제공되거나 패키지 관리자를 통해 설치할 수 있습니다.

 

설치

  • Ubuntu/Debian 기반 시스템
sudo apt-get install dos2unix
  • Red Hat/CentOS 기반 시스템
sudo yum install dos2unix

변환 실행

  • CRLF를 LF로 변환합니다.
dos2unix your_script.sh
  • CRLF → LF 자동 변환
  • 파일 내용 손상 없음
  • 대량 파일 처리 가능

2. sed 사용하기

sed 명령어를 사용하여 파일에서 CRLF를 제거할 수도 있습니다.

 

your_script.sh 파일에서 줄 끝의 \r (CR)을 제거합니다.

sed -i 's/\r$//' your_script.sh
  • 각 줄 끝의 \r 제거
  • GNU sed 기준
  • macOS에서는 sed -i '' 필요

3. tr 사용하기

tr 명령어를 사용하여 CRLF를 LF로 변환할 수도 있습니다.

 

your_script.sh에서 CR을 제거하여 fixed_script.sh에 저장합니다.

tr -d '\r' < your_script.sh > fixed_script.sh
  • 원본 파일 유지
  • 결과 파일은 LF 형식

4. 편집기에서 변경하기

일부 텍스트 편집기는 파일의 줄 끝 형식을 변경할 수 있는 기능을 제공합니다.

예를 들어, VS Code, Sublime Text, Notepad++와 같은 편집기를 사용할 수 있습니다.

 

VS Code

  • 파일을 열고 오른쪽 하단에서 CRLF를 클릭하여 LF로 변경합니다.

Notepad++

  • 메뉴에서 Edit > EOL Conversion > Unix (LF)를 선택합니다.

Shell 스크립트의 CRLF와 LF 문제를 해결할 수 있습니다.