sudo bash não pode executar script

1

Eu tento executar um arquivo de script de shell, mas falhei até agora no Ubuntu.

No meu terminal:

~/Desktop/FTL/data$ ls
amd64  exe_icon.bmp  FTL  licenses  resources  x86
~/Desktop/FTL/data$ sudo bash ./FTL.sh
[sudo] password for anon: 
bash: ./FTL.sh: No such file or directory
~/Desktop/FTL/data$ sh FTL.sh
sh: 0: Can't open FTL.sh
~/Desktop/FTL/data$ 
ICWiener
fonte
11
Você pode usar file FTLe o sistema fará o possível para descobrir o que é e informar.
0x7c0 20/09/2013

Respostas:

11

Bem, como pode ser deduzido da saída do lscomando, o nome do arquivo é FTL, não FTL.sh. Então você deve usar:

sudo bash ./FTL

ou

 sh ./FTL

ou talvez apenas:

./FTL

Verifique também se o arquivo é executável executando:

chmod +x FTL
Radu Rădeanu
fonte
1

O primeiro pensamento é mudar a extensão para .sh. Deve ser capaz de executar como ./FTL.sh. Segundo, se estiver faltando a #!/bin/shparte superior do arquivo, também não funcionará.

Terceiro, se você acabar tendo sudocomandos misturados com comandos que não exigem sudo, você pode echo <sudo_password> | command.

Nesse caso, a melhor prática (da perspectiva da automação / controle de qualidade) é executar seu comando ./FTL.sh <sudo_password>e capturar a senha para usar posteriormente no script para cada comando que solicitará a senha do sudo.

ex:

#!/bin/sh
PW=$1 #sets first parameter
...
# non-sudo commands
...
echo $PW | command`

Também não é uma má idéia lançar um yes |quando seu comando pergunta se você deseja continuar por qualquer motivo. Então você pode modificar o acima paraecho $PW | yes | command

Normalmente, também capto toda a saída durante o teste, o que pode ser realizado anexando |& tee path/to/logfile.logao final de qualquer comando, se você quiser assistir o progresso no console ou alternar |& teepara &>se tiver um longo tempo de execução ou não desejar para monitorar o progresso.

ex:

if echo $PW | yes | command |& tee path/to/logfile.log; then 
  if sed -Fq "Validation Passed" path/to/logfile.log; then
    echo "PASS: returned 'Validation Pass'"
    else echo "FAIL: test did not return 'Validation Pass'"
  fi
  else echo "Test Failed"
fi

Apenas uma rapidinha no comando sed, -Fpermite que você especifique o nome do arquivo (em vez de procurar uma saída do processo) e -qexecuta o sed silenciosamente e sai depois que termina a pesquisa no arquivo / processo. Veja a documentação do sed para mais informações.

csworenx
fonte
0

Sempre use este comando para todos os scripts a serem executados pelo servidor.

chmod +x filename.ext
Faron
fonte