Cada vez que executo um script usando bash scriptname.sh
a linha de comando no Debian, obtenho Command Not found
o resultado do script.
O script funciona, mas sempre há uma Command Not Found
instrução impressa na tela para cada linha vazia. Cada linha em branco resulta em um comando não encontrado.
Estou executando o script da /var
pasta.
Aqui está o script:
#!/bin/bash
echo Hello World
Eu o executo digitando o seguinte:
bash testscript.sh
Por que isso ocorreria?
bash -x scriptname.sh
para rastrear o erro. - No meu caso foi um arquivo sh salvo no Windows com VSCode e terminações de linha como "CRLF". No VSCode, no canto inferior direito, você pode alterar o terminador de linha de "CRLF" para "LF". Carregou este arquivo e poderia executá-lo finalmente combash scriptname.sh
.Respostas:
Certifique-se de que sua primeira linha seja:
Digite seu caminho para bash se não for
/bin/bash
Tente executar:
Isso irá converter terminações de linha, etc, do Windows para o formato Unix. ou seja, remove \ r (CR) das terminações de linha para alterá-las de
\r\n (CR+LF)
para\n (LF)
.Mais detalhes sobre o
dos2unix
comando (página de manual)Outra forma de saber se o seu arquivo está no formato DOS / Win:
O resultado será mais ou menos assim:
Isso produzirá o texto do arquivo inteiro com
<CR>
exibido para cada\r
caractere no arquivo.fonte
bash scriptname.sh
(mas ainda é uma boa prática, é claro).Você pode usar
bash -x scriptname.sh
para rastreá-lo.fonte
Eu também tive um problema semelhante. O problema parece ser as permissões. Se você fizer isso
ls -l
, poderá identificar que o seu arquivo pode NÃO ter o bit de execução ativado. Isso NÃO permitirá que o script seja executado. :)Como @artooro adicionou no comentário:
fonte
chmod +x testscript.sh
Isso pode ser trivial e não relacionado à pergunta do OP, mas muitas vezes cometi esse erro no início, quando estava aprendendo a criar scripts
Isso produzirá uma resposta 'comando não encontrado'. A forma correta é eliminar os espaços
fonte
Se o script fizer seu trabalho (relativamente) bem, ele está funcionando bem. Seu problema provavelmente é uma única linha no arquivo que faz referência a um programa que não está no caminho, não está instalado, está com erros ortográficos ou algo semelhante.
Uma maneira é colocar um
set -x
no topo do seu script ou executá-lo aobash -x
invés de apenasbash
- isto irá mostrar as linhas antes de executá-las e você geralmente só precisa olhar a saída do comando imediatamente antes do erro para ver o que está causando o problemaSe, como você diz, é as linhas em branco causando os problemas, você pode querer verificar o que é actaully no -las. Corre:
e certifique-se de que não haja caracteres engraçados "invisíveis" como o
CTRL-M
(retorno de carro) que você pode obter usando um editor do tipo Windows.fonte
No Bash para Windows, tentei executar incorretamente
sem ./ no início e obteve o mesmo erro.
Para pessoas com plano de fundo do Windows, a forma correta parece redundante:
fonte
use
dos2unix
em seu arquivo de script.fonte
Experimentar
chmod u+x testscript.sh
Eu conheço daqui: http://www.linuxquestions.org/questions/red-hat-31/running-shell-script-command-not-found-202062/
fonte
para executá-lo, você deve fornecer o caminho completo disso, por exemplo
fonte
Se você tiver o Notepad ++ e receber esta mensagem de erro .sh: "command not found" ou esta mensagem de erro autoconf "line 615: ../../autoconf/bin/autom4te: Não existe esse arquivo ou diretório" .
No seu Notepad ++, vá para Editar -> Conversão EOL e verifique Macinthos (CR) . Isso editará seus arquivos. Também aconselho a verificar todos os arquivos com este comando, pois em breve esse erro ocorrerá.
fonte
Tive o mesmo problema. Infelizmente
então fiz isso para converter.
e depois
fonte
Problemas com a execução de scripts também podem estar relacionados à formatação incorreta de comandos de várias linhas, por exemplo, se você tiver um caractere de espaço em branco após a quebra de linha "\". Por exemplo:
(observe que o espaço extra após "\") causará problemas, mas quando você remover esse espaço, ele funcionará perfeitamente.
fonte
Eu também estava tendo alguns dos
Cannot execute command
. Tudo parecia correto, mas na verdade eu estava tendo um espaço inquebrável pouco
antes do meu comando que era obviamente impossível de detectar a olho nu:Que, no Vim, parecia:
Somente depois de executar o verificador de script Bash
shellcheck
, encontrei o problema.fonte
shellcheck
está disponível on-line, mas é claro que você precisa copiar e colar seu script exatamente para ajudar. shellcheck.netCorri para isso hoje, copiando distraidamente o prompt de comando do dólar
$
(antes de uma string de comando) para o script.fonte
Adicione o diretório atual (.) Ao PATH para poder executar um script, bastando digitar o seu nome, que reside no diretório atual:
fonte
.
AO SEU CAMINHO.Você pode querer atualizar seus arquivos .bashrc e .bash_profile com aliases para reconhecer o comando que você está digitando.
Os arquivos .bashrc e .bash_profile são arquivos ocultos provavelmente localizados em sua unidade C: onde você salva seus arquivos de programa.
fonte