-bash: ./test.sh: /bin/bash^M: bad interpreter: 그런 파일이나 디렉토리가 없음
실제로 리눅스에서 웹호스팅을 사용하시다 보면, 윈도우에서 에디터플러스와 같은 편집기를
사용해서 파일을 업로드 한뒤, 리눅스로 SSH 나 Telnet 으로 접근을 해서 vi 같은 편집기로 열어
보시면 라인의 마지막에 항상 ^M 가 붙어 나오는 현상을 보실수 있을겁니다. 이는 리눅스와 윈도우
의 파일을 저장하는 형식이 달라서 생기는 현상입니다.
물론, 실제로 웹서비스를 하는데 큰 영향은 가지는 않는경우가 대부분입니다.
하지만, 예를 들어, 윈도우에서 작성을 한 Perl, Bash, Python 등의 스크립트인 경우 쉘에서 직접
실행할 경우도 존재합니다. 이때에는 파일형식이 윈도우이기때문에 실행이 되지 않습니다.
아래의 예처럼 ^M 문자 때문에 bad interpreter 라는 오류가 나오게 됩니다.
-bash: ./test.sh: /bin/bash^M: bad interpreter: 그런 파일이나 디렉토리가 없음
이때에 이 문제를 해결하실수 있는 몇가지 방법을 제시하도록 하겠습니다.
ㅁ 텍스트문에서 ^M자 없애기
1. vi 에서 ( vim 아닙니다. )
명령어 모드
:%s/^M//g
%s는 치환명령 입니다
%s///mode
위에서 mode에 g를 썼는데, 이것은 global의 약자로 파일 전체에 모두 적용하는 mode 입니다.
:%s/^M 만 해도 됩니다.
^M 은 Ctrl+V+M or Ctrl+V+Enter
2. vim 에서
vim에서는 dos mode의 화일을 읽어도 화면에 ^M을 표시하지 않습니다.
대신 밑에 [dos] 라고 나타납니다.
다음과 같이 해서 unix mode로.. 즉 ^M을 빼는것입니다.
:set fileformat=unix
반대로 unix mode에서 dos mode로 바꾸고 싶다면
:set fileformat=dos
3. cat과 tr 사용
cat은 파일의 내용을 stdout 으로 출력하고, tr은 특정 캐릭터를 바꾸거나 없애는것입니다.
예를 들어 file1.txt 가 dos mode 라면
# cat file1.txt | tr -d ^M > file2.txt
이렇게 하면 ^M만 제거된 새로운 file2.txt가 생깁니다.
이때 주의할 것은 절대로 위의 두 화일명을 같게 하면 안된다는 것입니다.
4. dos2unix
dos2unix 명령어는 위의 1,2,3 과 동일한 역할을 하지만, 단순한 명령도구 입니다.
아래는 윈도우 파일 형식을 유닉스(리눅스) 형식으로 변환하는 명령입니다.
[root@www ~]# dos2unix file1.txt
dos2unix: converting file file1.txt to UNIX format ...
반대로 아래와 같이 유닉스(리눅스) 형식의 파일을 윈도우 형식으로 변환 또한 가능합니다.
[root@www ~]# unix2dos file1.txt
unix2dos: converting file file1.txt to DOS format ...
출처:http://mydoc.digimoon.net/board/skin/ggambo7002_board/print.php?id=board&no=228
'서버 등 운영체제(OS) > Linux' 카테고리의 다른 글
ssh 원격 접속 에러(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!) (0) | 2015.10.01 |
---|---|
tar로 압축 해제할 때, 원하는 디렉토리를 지정해서 해제 (0) | 2015.09.24 |
우분투 자동 주기 백업 스크립트. (1) | 2015.08.10 |
깨진 파일명 삭제 방법 (0) | 2015.06.25 |
[XE] HTTP 403 Upload Error 일때, 서버관리자 해결법 (0) | 2015.06.08 |