회원가입

로그인

아이디
비밀번호
ID/PW 찾기
아직 회원이 아니신가요? 회원가입 하기

vi - 파일포맷변환 커맨드

Profile
:맥노턴
vi 에디터... 유닉스 시스템에서 반드시 알아야 할 커맨드입니다.

vi 중에 중요하면서도 잘 쓰이지 않는 기능 하나를 추가합니다.

기능 설명에 앞서, 텍스트 파일의 포맷에 대해 말씀드리죠.


텍스트파일은 대표적 운영체제 세 종류(Unix, Dos, Mac) 마다 파일 형태가 약간 다릅니다. 문자 코드는 ASCII로 모두 동일합니다만, 바로 "줄바꿈 문자"가 각각 다른 코드로 사용됩니다...

<CR> Carrage Return - ASCII code : 13번
<LF> Line Feed (=NL; New Line) - ASCII code : 10번


이 세 문자는 각각 ASCII 코드값이 다르지만 공통적으로 "줄바꿈 문자"로 사용됩니다. 메모장에서 내용을 입력할 때, 엔터키를 이용해서 줄을 바꾸면, 자동으로 위의 문자들이 조합되어 입력되게 됩니다. 그래서 줄바꿈이라고 표시하는 것이죠.

Dos에서 작성된 텍스트 파일에서는 <CR>+<LF> 두 문자를 합쳐서 줄바꿈 표시를 합니다.

Unix 에서는 <LF> 문자 하나만 사용합니다.

Mac 에서는 <CR> 만 사용하죠.

그래서 생기는 문제가 무엇이냐면... 중요!!!

Dos 에서 작성된 파일을 Unix 에 가져가서 실행하려 하면, 명령행의 오류가 생깁니다.

왜냐하면, 앞서 설명한대로 Dos 에서는<CR>+<LF> 문자가 줄바꿈 문자로 사용되기 때문에, 메모장에서 작성한 쉘스크립트가 있다고 가정하면,

#!/bin/sh<CR><LF>
...
...

처럼 표시 됩니다. <CR><LF>는 보이지 않는 문자이기 때문에 아무리 눈씻고 찾아봐도 모릅니다.

그렇게 되면,

#! 뒤에 붙은 /bin/sh 인터프리터를 이용하여 쉘커맨드를 실행하라는 뜻인데 유닉스는 어떻게 인식하냐면.. /bin/sh<CR> 인터프리터를 이용하라고 인식합니다. 그래서 /bin/sh<CR> 파일을 찾는데...

/bin/sh 와 /bin/sh<CR> 파일은 전혀 다르다는데서 문제가 생깁니다.
이렇게 되면, 사용자가 보기에는 아무런 문제가 없는데, 인터프리터를 찾지 못했다는 에러가 발생하게 됩니다.


문제를 해결하는 방법은 의외로 간단합니다.
vi 에디터로 Dos 형태의 파일을 Unix 형태로 바꾸어 저장하면 끝입니다.

그러기 위한 커맨드가...

vi 에디터를 실행하여 파일을 오픈합니다...

# vi shellscript.sh ↙



파일을 오픈 한 뒤에, 다음과 같은 명령을 입력합니다.

:set fileformat=unix ↙



그러면 오픈된 file의 format은 앞으로 unix 라고 set 해버립니다.
그 다음에...

:w ↙


해서 저장해 버리면 Dos 형태의 텍스트 파일이 Unix 포멧으로 변형되어 저장됩니다. 동작은 다른게 아니고...

Dos용 개행문자 <CR>+<LF> 를 모두 Unix용 개행문자 <LF> 로 바꾸는 것이죠...

이 명령은 아무때나 사용되는 것이 아닌지라 자칫 잊어버리기 쉬우므로 이런게 있다~만 잘 기억해 두셨다가 모르면 다시 찾아오십시오. ^^

:맥노턴.

Profile
:맥노턴
레벨 30
569311/686490
81%
McNorton & Education Lab.
Director
댓글
0
댓글 쓰기
권한이 없습니다.

로그인

아이디
비밀번호
ID/PW 찾기
아직 회원이 아니신가요? 회원가입 하기