En mi script hago algo como esto:
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
El eco da un resultado como este:
ssh [email protected] 'some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;'
Después de lo "ejecutivo", obtengo el resultado:
bash: some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;: No such file or directory
Sin embargo, cuando copie el comando de la salida de eco y ejecútelo directamente desde la terminal, funciona de maravilla. ¿Alguna idea de por qué?
Respuesta1
exec
reemplaza el shell con un programa, invocándolo con los argumentos proporcionados. El shell ve 2 tokens: "exec" y "some/path/script.sh arg1 arg2; some/path/script2.sh arg1 arg2;". El segundo argumento se interpreta como una ruta a un programa a ejecutar, incluidos todos los espacios y puntos y coma. Sólo un shell sabe dividir argumentos en espacios en blanco y separar comandos con punto y coma. Por lo tanto, debes reemplazar exec
con una llamada a un shell, como sh -c "$ssh_command"
.
Respuesta2
Nohuppuede serle útil.
Intente integrar algo como esto desde el siguiente enlace.
ssh -n -f usuario@host "sh-c'cd/dondequiera; nohup ./lo que sea > /dev/null 2>&1 &'"