chmod를 사용하여 파일에 액세스할 수 있는 권한을 부여한 후 명령을 찾을 수 없음 오류가 발생함

chmod를 사용하여 파일에 액세스할 수 있는 권한을 부여한 후 명령을 찾을 수 없음 오류가 발생함

나는 실행 스크립트를 사용하려고 노력해 왔습니다 chmod.

스크립트를 실행하는 방법은 다음과 같습니다.

$ chmod u+x tester
$ ./tester
./tester: Command not found.

"명령을 찾을 수 없음" 오류가 계속 발생하며 그 이유를 알아내려고 노력 중입니다. 또한 전체 경로 복구를 시도하고 chmod거기에서 실행했지만 여전히 문제가 해결되지 않았습니다.

나는 이것을 사용했으며 ls -l tester이것이 내 액세스 권한입니다.

-rwxr-xr-x 1 kplus user123 983 Jan 28 15:00 tester

제가 사용하고 있는 Linux 정식 버전은 다음과 같습니다.

Linux KODRL58IRA02 2.6.18-308.e15 #1 SMP Fri Jan 27 17:17:51 EST 2012 x86_64 

내가 실행하려는 스크립트는 다음과 같습니다.

#!/bin/ksh

echo ""
echo " = K+WA =";
WA_PORT="`cat /home/kptp4/testdirectory2/kondor.active |grep PORTAL_PORT|cut -d '&' -f 2`"

#== Checking Tomcat of WebAccess
printf "%25s" Tomcat
touch /home/kptp4/processiddirectory/tomcat-*.pid
PID=`cat /home/kptp4/processiddirectory/tomcat-*.pid`
if  [[ $PID = "" ]];then
echo " x 0"
else
PSPID=`/bin/ps -eo pid | grep -w $PID`
if [[ $PSPID -eq $PID ]];then
/bin/ps -ef | grep $PID | grep -v grep | awk 'NR==1 {print " = "$8 $9 $10 $11 $12 $13 $14 $15}'
else
echo " x 0"
fi
fi

PORT_STATUS=`netstat -an | grep ${WA_PORT} | grep LISTEN | perl -pe "s/^.+\n/LISTENING/g;"`
PORT_STATUS=${PORT_STATUS:="NOT LISTENING!!!"}
echo " Port ${WA_PORT}/TCP = ${PORT_STATUS}"

cd /home/kptp4/WebAccessFolder
(PATH=/home/kptp4/testdirectory/checkall.sh;) | perl -pe "s,^, ,g;"
echo ""

ksh또한 를 사용 하여 실행해 보았지만 운이 없었 bash습니다 sh...

$ bash tester
: Permission denied

 = K+WA =
: Permission denied
: Permission denied
tester: line 29: syntax error: unexpected end of file
$ sh tester
: Permission denied

 = K+WA =
: Permission denied
: Permission denied
tester: line 29: syntax error: unexpected end of file
$ ksh tester
tester[2]: ^M: cannot execute [Permission denied]

 = K+WA =
tester[4]: ^M: cannot execute [Permission denied]
tester[6]: ^M: cannot execute [Permission denied]
tester: line 10: syntax error at line 29: `if' unmatched

이제 위에서 사용한 권한 명령( chmod u+x filename)을 사용하여 다른 스크립트를 실행할 수 있는데 왜 이 스크립트를 실행할 수 없는지 궁금합니다. 이 문제를 어떻게 해결할 수 있는지 아시나요? 그런데 이 스크립트는 내 SunOS 버전의 Linux에서 잘 실행되는데 왜 이 시스템에서는 제대로 실행되지 않는지 궁금합니다.

어떤 도움이라도 대단히 감사하겠습니다. 감사합니다!

답변1

^M스크립트 파일에 캐리지 리턴( , chr(13))과 같은 개행 문자 외에 DOS/Windows 줄 끝이 있는 것 같습니다 . 출력은 tester[2]: ^M: cannot execute [Permission denied]다음과 같아야 합니다. 이는 또한 쉘이 파일을 직접 실행할 수 없는 이유를 설명합니다. 쉘은 /bin/ksh^M존재하지 않을 가능성이 높은 shebang 라인에서 이름이 지정된 실행 파일을 찾고 있습니다 .

file tester먼저 줄 끝을 표시하는 편집기에서 파일을 열거나 또는 를 사용하여 이러한 경우인지 확인해야 합니다 od -ah tester. 많은 편집자는 유틸리티와 마찬가지로 CR을 제거할 수 있습니다 dos2unix. Windows에서는 Notepad++ 편집기에서 Edit-> EOL Conversion-> 줄 끝 변환 메뉴 항목을 사용할 수 있습니다 UNIX/OSX Format.

당신은 또한 볼 수 있습니다그것은 무엇 ^M이며 어떻게 제거합니까?.


^SuSE Linux에는 웹에서 검색된 모든 임의의 Perl 스크립트를 Unix 줄 끝으로 변환하지 않고도 실행할 수 있도록 허용하는 /usr/bin/perl^M흥미로운 심볼릭 링크가 있었습니다 ./usr/bin/perl

관련 정보