私は実行スクリプトを使用しようとしてきました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には、Web上で検索された任意のPerlスクリプトをUnix行末に変換せずに実行できるようにする/usr/bin/perl^M
興味深いシンボリックリンクがありました。/usr/bin/perl