쉘 스크립트가 실행되지 않습니다

쉘 스크립트가 실행되지 않습니다

무슨 일이 일어났는지 잘 모르겠습니다.

a.sh다음 명령을 사용하여 스크립트를 호출 해 보겠습니다.

/users/guru$ cat a.sh
#! /usr/bin/ksh

echo "Hello"
date

으로 실행하면 ksh작업이 완료됩니다.

/users/guru$ ksh a.sh
Hello
Tue Jul 15 15:00:52 EDT 2014

파일 권한과 ksh경로를 확인하세요.

/users/guru$ ls -l a.sh
-rwxrwxrwx    1 guru  kpc         35 Jul 15 15:00 a.sh
/users/guru$ a.sh
ksh: a.sh:  not found
/users/guru$ which ksh
/usr/bin/ksh

답변1

실행하려고 할 때 "./a.sh"를 시도하십시오. 파일이 어디에 있는지 알아야 합니다.

"./"는 현재 디렉터리를 찾도록 지시합니다.

답변2

명령을 입력하면 쉘은 변수에 의해 지정된 디렉토리 목록에서 해당 명령을 찾습니다 PATH.

PATH기본적으로 보안상의 이유로 현재 디렉토리는 여기에 없으므로 쉘은 스크립트를 찾을 수 없습니다.

, 를 사용하여 ./현재 디렉토리를 나타내면 쉘이 스크립트의 위치를 ​​알 수 있습니다.

답변3

./scriptname다른 질문에 올렸듯이 가끔 다른 포스팅에 올렸던 것처럼 스크립트를 실행해도 .답변, 컴퓨터에서 테스트할 수 있습니다.

시험

cat ksh_experiment.ksh

#!/usr/bin/ksh
echo "Hello"

이제 파일을 실행할 때 권한을 제공하면 출력이 성공적으로 생성됩니다. 이제 논의한 대로여기, 파일에 캐리지 리턴을 삽입했습니다. 이제 스크립트를 실행하면 내가 얻는 결과는 다음과 같습니다.

ksh: ./ksh_experiment.ksh: not found [No such file or directory]

이제 cat -v ksh_experiment.ksh동일한 출력이 생성됩니다. 또한 를 입력하면 vim ksh_experiment.ksh새 파일이 열립니다.

제공한 링크의 답변에서 논의한 대로 다음 명령을 사용하여 캐리지 리턴을 제거했습니다.

 perl -p -i -e "s/\r//g" ksh_experiment.ksh

수정사항을 실행하면 예상한 결과가 나타납니다.

이제 dos2unix이를 사용하여 파일을 변환할 수도 있습니다.

관련 정보