使用 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 ""

我也尝试使用 , 运行它kshbashsh没有运气......

$ 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除了换行符之外还具有 DOS/Windows 行结尾,例如回车符( 、 chr(13))。输出tester[2]: ^M: cannot execute [Permission denied]肯定是这样的。这也可以解释为什么 shell 无法直接执行该文件:它正在寻找/bin/ksh^M从 shebang 行中提取的名为的可执行文件,该可执行文件很可能不存在。

您应该首先尝试找出是否是这种情况,例如,通过在显示行结尾的编辑器中打开文件,或者使用file tester或 甚至od -ah tester.许多编辑器可以删除 CR,实用程序也可以dos2unix。在 Windows 下,Notepad++ 编辑器能够使用菜单项Edit-> EOL Conversion->转换行结尾UNIX/OSX Format

也可以看看它是什么^M以及如何摆脱它?


^SuSE Linux 曾经有一个从/usr/bin/perl^M到 的有趣符号链接/usr/bin/perl,允许从 Web 检索的所有随机 Perl 脚本运行,即使不将它们转换为 Unix 行结尾。

相关内容