[shell] -ksh: {파일명.sh}: not found 오류 문제
[상황]
- 윈도우에서 스크립트 작성 후 linux로 옮겨 실행
아래와 같이 스크립트 파일 자체를 실행 할 수 없다고 오류 메시지가 출력
-ksh: {파일명.sh}: not found ~~
"쉘 스크립트 -ksh not found"로 오류 검색
[결론]
- 윈도우는 텍스트 파일의 끝에서 CR-LF로 줄바꿈을 하고, 유닉스는 LF 문자로 줄바꿈을 한다.
- 윈도우에서 작성한 쉘 스크립트가 리눅스로 옮겨 실행 시 스크립트 내에 "유닉스 개행문자"와 도스 개행문자"가 섞여 있을 때 문제 발생
- 모든 문자열 끝에 '^M'이라는 문자는 개행문자가 깨진 흔적
[원인 파악 방법]
# 오류를 발생하는 파일을 vi 파라미터 -b를 추가하여 실행
vi -b {파일명}.sh
- 오류가 발생했던 파일을 "vi -b {파일명}.sh"으로 실행하여 확인
(아래와 비슷한 문자열을 확인)
#!/bin/sh^M
function () {^M
command^M
}^M
[원인]
- 쉘 스크립트 파일 형식이 DOS 형식으로 인하여 CR(carriage return)이 달라서 생기는 경우로 파악
[해결책]
1. vi 에디터에서 DOS 파일 타입을 Unix 파일 타입으로 세팅
# Unix Text로 변환
:set ff=unix
2. vi에서 각 행의 끝에 있는 ^M 문자를, 모두 공백으로 바꾸기
# 각 행의 끝($)에 있는 ^M문자를 모두(g) 공백(//)으로 변환(%s)
:%s/^M$//g
# ^M쓰는 법
ctrl + v 키 > '^' ctrl + m > 'M'
'Basic > shell' 카테고리의 다른 글
[Shell] netstat (0) | 2020.02.12 |
---|---|
[Shell] rsync (0) | 2019.09.03 |
[Shell] Exception Handling (0) | 2019.08.12 |
[Shell] 파일 찾기 (0) | 2019.08.12 |
[shell] value too great for base (error token is "08") (0) | 2019.07.07 |