Não existe nenhum erro de arquivo ou diretório ao tentar executar o script de inicialização no Debian

11

Muito novo no Debian (Raspbian), e estou lutando com isso por alguns dias. Eu tenho um script de inicialização que quero executar na inicialização.

Eu executei os seguintes comandos, para tornar o script executável e adicioná-lo com os parâmetros padrão à sequência de inicialização.

sudo chmod 755 /etc/init.d/testsam
sudo update-rc.d testsam defaults

Ao tentar testar o script, eu executo o seguinte:

sudo /etc/init.d/testsam start

Mas ao fazer isso, recebo um erro: não é possível executar o /etc/init.d/testsam: não existe esse arquivo ou diretório.

Minimizei o script para o mais básico, mas ainda não tenho idéia do motivo real. Espero que alguém possa me indicar a solução certa? Este é o script no momento.

#! /bin/bash

# /etc/init.d/testsam

case "$1" in
 start)
        #echo "starting script"
        ;;
 stop)
        #echo "stopping script"
        ;;
 *)
        #echo "Usage: /etc/init.d/testsam {start|stop}"
        exit 1
         ;;
esac

exit 0

Obrigado por qualquer ajuda

Sam Vanhoutte
fonte

Respostas:

22

Você provavelmente tem um retorno de carro ( ^M) no final da sua #!linha.

O formato da #!linha é muito rigoroso e o retorno de carro não é permitido lá, a menos que seu intérprete seja realmente chamado/bin/bash^M

Nunca haverá retornos de carro em um arquivo criado com um editor unix adequado, a menos que você faça o possível para adicioná-los.

Ao editar um arquivo existente que já usa terminações de linha CRLF, os retornos de carro podem ficar ocultos. Por exemplo, o vim faz isso. Mas também diz [dos]na linha de status para avisar que o arquivo está no formato DOS. Você pode dizer :set fileformat=unixe salvar o arquivo para convertê-lo.


fonte
5
Para verificar se esse é realmente o problema, faça cat -v /etc/inti.d/testsam. Se você tiver um retorno de carro incorreto, ele aparecerá como ^M.
Jenny D
obrigado pela ajuda rápida! eu tinha recebido o arquivo através do comando wget e era de fato um arquivo baseado no Windows.
Sam Vanhoutte
Em alguns servidores eu poderia usar, dos2unixmas o que você faz quando o host não permite que esse comando limpe todas as instâncias de ^M?
user33777
1
Outra maneira de corrigir o problema:sed -i -e 's/\r//g' /path/file
Al Belsky