[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

+ Recent posts