로컬 윈도우 PC에서 shell 스크립트를 만든 후 리눅스 서버에 FTP 업로드 하였다.
업로드 한 shell을 실행하면 다음과 같은 에러 메시지가 떨어진다.
bash2: ./test.sh: /bin/sh^M: bad interpreter: 그런 파일이나 디렉토리가 없음
에러 메시지를 잘 보면 ^M <- 이 문자열이 보일 것이다.
이것은 실제 /bin 디렉토리의 sh^M 이라는 shell 스크립트를 찾으려고 했기 때문에 발생된 오류이다.
그럼 왜 저런 문자열이 붙어 있는 것일까?
이는 FTP 업로드에서 찾아볼 수 있다.
FTP 전송 유형에는 ascii, binary 이렇게 두 가지를 지원하는데 ascii로의 파일 전송 시에는 윈도우에서 개행으로 사용하는 \r\n 이 리눅스로 업로드 되면서 \n 으로 변경되게 된다.
하지만 binary 전송 유형은 아무런 변환 과정 없이 그대로 \r\n 이 포함되어 업로드 된다.
결국 리눅스에서의 개행 문자 \n 을 제외한 \r 은 ^M 와 같은 문자열로 표시가 되어 문제를 일으킨다.
그러니 윈도우에서 shell 작업 후 리눅스에 FTP 업로드 할 때에는 꼭 ascii 전송 유형으로 변경 후 업로드 하자.