Erro de script de shell (: não encontrado [Nenhum arquivo ou diretório]) [duplicado]

5

Estou usando o seguinte script no servidor linux. E o que está dando:

: not found [No such file or directory]

Este é o script:

# ------------------------------------------------------------------
# K.Sugunan Host health check
#           Description
#
#           This script to initiate health check on servers.
#           It will check for CPU, memory and some connectivity with 
#           up stream and down stream system.
#
# ------------------------------------------------------------------

# Applying initial variables and loading config parameters
DOCROOT=$(pwd)"/"
TIME_NOW=$(date +"%Y-%m-%d %H:%M:%S")

echo $DOCROOT

. $DOCROOT"config/main.sh"
. $DOCROOT"config/web.sh"
. $DOCROOT"config/telnet.sh"

echo $CPU_A

O erro será o seguinte:

: not found [No such file or directory]
: not found [No such file or directory]
/home/sugunan/phobos/
: not found [No such file or directory]
: cannot open [No such file or directory]os/

Eu uso as seguintes formas de executar o script

ksh poc.sh
sh poc.sh
./poc.sh

Todos os itens acima dão erro semelhante. Mesmo eu incluo #!/bin/bash ainda existe o erro. Eu tentei #!/bin/ksh e #!/usr/bin/ksh também. Tudo isso dá o erro. Qual pode ser o motivo do problema neste servidor?

    
por sugunan 19.08.2015 / 13:49

1 resposta

7

Parece que as linhas vazias contêm um caracter invisível (não imprimível) e o servidor está tentando executá-lo como se fosse o nome de um comando; daí o erro : not found [No such file or directory] . Exclua as linhas vazias ou verifique se elas estão realmente vazias.

Editar: o comentário do OP confirma que é realmente o caso, já que o código foi escrito no Windows. No Windows, os arquivos de texto ASCII terminam cada linha com um caractere Line Feed + Carriage Return, enquanto o UNIX usa apenas um Line Feed.

Para resolver isso, você pode:

  • copiar & cole o código diretamente em um editor no Linux
  • Certifique-se de configurar seu editor do Windows para converter caracteres de fim de linha para o padrão UNIX
  • use o comando dos2unix para converter o arquivo ASCII do Windows para um arquivo UNIX
por 19.08.2015 / 14:03