sudo bash não pode executar script

0

Eu tento executar um arquivo de script 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$ 
    
por I.C.Wiener 20.09.2013 / 11:15

3 respostas

11

Bem, como pode ser deduzido da saída do comando ls , 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
    
por Radu Rădeanu 20.09.2013 / 11:20
0

Sempre use este comando para cada script a ser executado pelo servidor.

chmod +x filename.ext
    
por Faron 20.09.2013 / 21:47
0

Primeiro, pense em alterar a extensão para .sh . Deve ser capaz de executar como ./FTL.sh . Em segundo lugar, se estiver faltando o #!/bin/sh no topo do arquivo, também não funcionará.

Em terceiro lugar, se você tiver comandos sudo misturados com comandos que não exigem sudo , você pode echo <sudo_password> | command .

Nesse caso, a melhor prática (de uma perspectiva de automação / QA) é executar seu comando como ./FTL.sh <sudo_password> e capturar a senha a ser usada posteriormente no script para cada comando que solicitará a senha 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 perguntar se você deseja continuar por qualquer motivo. Então você pode modificar o acima para echo $PW | yes | command

Eu também geralmente captura todas as saídas durante o teste, o que pode ser feito anexando |& tee path/to/logfile.log ao final de qualquer comando, se você quiser assisti-lo no console, ou alternar o |& tee para &> se tem um longo período de tempo ou não quer 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 rápida no comando sed, -F permite que você especifique o nome do arquivo (em vez de pesquisar uma saída do processo) e -q é executado silenciosamente e sai depois de concluir a pesquisa no arquivo / processo. Consulte a documentação do sed para obter mais informações.

    
por csworenx 21.06.2018 / 23:13