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

おすすめ記事