Naturalmente, potete impostare la variabile d'ambiente all'interno del comando, tuttavia dovrete stare attenti al quoting: ricordate che la vostra shell analizzerà la vostra linea di comando locale, e poi la shell remota farà un tentativo sulla stringa che riceve.
Se volete che una variabile abbia lo stesso valore sul server che ha sul client, provate l'opzione SendEnv
:
ssh -o SendEnv=MYVAR server.example.com mycommand
Questo però richiede il supporto del server. Con OpenSSH, il nome della variabile deve essere autorizzato in /etc/sshd_config
.
Se il server permette solo certi nomi specifici di variabili, puoi aggirare la cosa; per esempio una configurazione comune permette LC_*
attraverso, e puoi fare come segue:
ssh -o SendEnv=LC\_MYVAR server.example.com 'MYVAR=$LC\_MYVAR; unset LC\_MYVAR; export MYVAR; mycommand'
Se anche LC_*
non è un'opzione, puoi passare informazioni nella variabile d'ambiente TERM
, che viene sempre copiata (potrebbe esserci un limite di lunghezza però). Dovrete comunque assicurarvi che la shell remota non limiti la variabile TERM
per designare un tipo di terminale noto. Passate l'opzione -t
a ssh se non state avviando una shell interattiva remota.
env TERM="extra information:$TERM" ssh -t server.example.com 'MYVAR=${TERM%:\*}; TERM=${TERM##\*:}; export MYVAR; mycommand'
Un'altra possibilità è quella di definire la variabile direttamente nel comando:
ssh -t server.example.com 'export MYVAR="extra information"; mycommand'
Così, se si passa una variabile locale:
ssh -t server.example.com 'export MYVAR='"'$LOCALVAR'"'; mycommand'
Attenzione però ai problemi di quoting: il valore della variabile sarà interpolato direttamente nello snippet di shell eseguito sul lato remoto. L'ultimo esempio sopra presuppone che $LOCALVAR
non contenga alcun apice singolo ('
).