comando não encontrou erro depois de dar permissão para acessar o arquivo usando chmod

0

Estou tentando executar um script usando chmod .

Veja como tentei executar o script:

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

Eu sempre recebo o erro "Comando não encontrado" e estou com dificuldades para descobrir o motivo. Tentei corrigir o caminho completo também e executar chmod de lá, mas ainda assim não resolve o problema.

Eu usei ls -l tester e aqui está minha permissão de acesso:

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

Aqui está a versão completa do Linux que estou usando:

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

Aqui está o script que estou tentando executar:

#!/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 ""

Eu também tentei rodar usando ksh , bash , sh mas sem sorte ...

$ 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

Agora, estou me perguntando por que não posso executar este script, pois posso executar outros scripts usando os comandos de permissão que usei acima ( chmod u+x filename ). Alguma ideia de como posso resolver isso? Este script está funcionando bem na minha versão SunOS do Linux, e estou me perguntando por que ele não é executado corretamente neste sistema.

Qualquer ajuda seria muito apreciada, obrigado!

    
por Francis 28.01.2016 / 09:44

1 resposta

1

Parece que seu arquivo de script tem finais de linha do DOS / Windows, por exemplo, Retorno de carro ( ^M , chr (13)) além do caractere de alimentação de linha. A saída tester[2]: ^M: cannot execute [Permission denied] certamente se parece com isso. Isso também explicaria porque o arquivo não pode ser executado diretamente pelo shell: ele está procurando por um executável chamado /bin/ksh^M extraído da linha shebang, que provavelmente não existe.¹

Você deve primeiro tentar descobrir se esse é o caso, por exemplo abrindo o arquivo em um editor que mostra os finais de linha ou usando file tester ou mesmo od -ah tester . Muitos editores podem remover os CRs, assim como o utilitário dos2unix . No Windows, o editor do Notepad ++ é capaz de converter finais de linha usando a entrada do menu Edit - > EOL Conversion - > UNIX/OSX Format .

Veja também O que é ^M e como me livrar dele? .

¹ O SuSE Linux costumava ter um link simbólico engraçado de /usr/bin/perl^M para /usr/bin/perl para permitir que todos os scripts Perl aleatórios recuperados da Web funcionassem mesmo sem convertê-los em finais de linha Unix.

    
por 28.01.2016 / 10:04