No meu script eu faço algo assim:
command="some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;"
ssh_command="ssh root@$ip '$command'"
echo $ssh_command
exec $ssh_command
O echo fornece uma saída como esta:
ssh [email protected] 'some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;'
Depois do "exec", recebo a saída:
bash: some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;: No such file or directory
No entanto, ao copiar o comando da saída de eco e executá-lo diretamente do terminal, ele funciona perfeitamente. Alguma idéia do porquê?
Responder1
exec
substitui o shell por um programa, invocando-o com os argumentos fornecidos. O shell vê 2 tokens: "exec" e "some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;". O segundo argumento é interpretado como um caminho para a execução de um programa, incluindo todos os espaços e ponto e vírgula. Somente um shell sabe dividir argumentos em espaços em branco e separar comandos em ponto e vírgula. Portanto, você deve substituir o exec
por uma chamada para um shell, como sh -c "$ssh_command"
.
Responder2
Nãopode ser útil para você.
Tente integrar algo assim no link abaixo.
ssh -n -f usuário@host "sh-c'cd /qualquer lugar; nohup ./qualquer > /dev/null 2>&1 &'"