2012-06-30 15 views
5

Sto provando a scrivere uno script per accedere a diversi server remoti ed eseguire uno script in ciascun server. Tuttavia, mi piacerebbe passare una variabile attraverso ssh. Qualcosa del genere:variabili passanti tramite ssh

var="/home/dir/" 

    ssh -T $mchname <<'ENDSSH'  
    $var"run_script" <input> output &  
ENDSSH 

Questo tentativo ingenuo non funziona ($ var è semplicemente nullo). Quale sarebbe la sintassi corretta? Grazie in anticipo.

risposta

4

Rimuovere le virgolette da circa ENDSSH. Impediscono l'espansione delle variabili all'interno dello here document.

+0

Ok, questo funziona. Ma ora il controllo ritorna allo script principale una volta che "run_script" è finito in $ mchname (anche se sto usando '&'), che non è quello che voglio. Come posso ripararlo? Ci scusiamo per le domande di base. Se vuoi, puoi indicarmi un tutorial su ssh dove posso guardare questo. Grazie. – user1477337

+0

@ user1477337: La e commerciale è in effetti sulla macchina di destinazione e significa semplicemente che il controllo ritorna allo script principale più rapidamente poiché non deve attendere il completamento di 'run_script'. Ma poiché non c'è nulla dopo il comando 'ssh' e il suo documento qui presente, lo script principale dovrebbe uscire non appena viene chiusa la connessione' ssh' che dovrebbe essere quasi immediatamente. Comunque, se c'è qualche ragione per cui è necessario, puoi provare il prefisso 'exec' al comando' ssh': 'exec ssh ... 'Tutto questo è correlato alla shell e per lo più non è specifico per' ssh'. –

2

Prova questo:

var="/home/dir/" 

    ssh -T $mchname VAR=$var 'bash -s'<<'ENDSSH'  
    $VAR"run_script" <input> output &  
ENDSSH 
Problemi correlati