Mi piacerebbe eseguire più comandi in sequenza su una macchina remota, e alcuni dei successivi comandi dipendono da quelli precedenti. Nel semplice esempio possibile ottengo questo:è possibile utilizzare le variabili nel comando ssh remoto?
ssh my_server "echo this is my_server; abc=2;"
this is my_server
abc=2: Command not found.
ssh my_server "echo this is my_server; abc=2; echo abc is $abc"
abc: undefined variable
Per un po 'di informazioni di base, quello che in realtà voglio fare è mettere insieme un percorso e lanciare un'applicazione Java:
ssh my_server 'nohup sh -c "((echo this is my_server; jabref_exe=`which jabref`; jabref_dir=`dirname $jabref_exe`; java -jar $jabref_dir/../jabref.jar` $1 &/dev/null) &)"' &
jabref_dir: Undefined variable.
In questo modo, ogni volta che jabref viene aggiornato ad una nuova versione sul server, non dovrò aggiornare manualmente il percorso del file jar. L'eseguibile jabref non accetta argomenti, ma lo fa con java -jar
, ed è per questo che devo destreggiarmi un po 'con il percorso.
Al momento ho l'elenco dei comandi in un file di script separato e chiamare
ssh my_server 'nohup sh -c "((my_script.sh &/dev/null) &)"' &
che funziona, ma dal momento che la chiamata ssh è già dentro un file di script sarebbe bello avere tutto insieme.
grazie, che mi ha messo sulla strada giusta. Prevenire l'espansione con virgolette o '\ $' era la chiave. Si scopre che la shell di default sul server era tcsh, e quello era un altro motivo per cui 'abc = 2' non funzionava. – craq
Ottima risposta. Sto usando Jenkins con il plugin SSH Agent e funziona come un fascino. –