Natuurlijk kun je de omgevingsvariabele binnen het commando instellen, maar je moet voorzichtig zijn met citeren: vergeet niet dat je shell je lokale commandoregel gaat parsen, en dan zal de shell op afstand de string die hij ontvangt gaan proberen.
Als je wilt dat een variabele op de server dezelfde waarde krijgt als op de client, probeer dan de SendEnv
optie:
ssh -o SendEnv=MYVAR server.example.com mycommand
Dit vereist echter ondersteuning van de server. Met OpenSSH moet de naam van de variabele geautoriseerd worden in /etc/sshd_config
.
Als de server alleen bepaalde specifieke variabelennamen toestaat, kun je daar omheen werken; een gebruikelijke opstelling laat bijvoorbeeld LC_*
door, en je kunt het volgende doen:
ssh -o SendEnv=LC\_MYVAR server.example.com 'MYVAR=$LC\_MYVAR; unset LC\_MYVAR; export MYVAR; mycommand'
Als zelfs LC_*
geen optie is, kun je informatie doorgeven in de TERM
omgevingsvariabele, die altijd wordt gekopieerd (er kan echter een lengte limiet zijn). Je moet er nog steeds voor zorgen dat de shell op afstand de TERM
variabele niet beperkt tot een bekend terminaltype. Geef de -t
optie door aan ssh als je geen interactieve shell op afstand start.
env TERM="extra information:$TERM" ssh -t server.example.com 'MYVAR=${TERM%:\*}; TERM=${TERM##\*:}; export MYVAR; mycommand'
Een andere mogelijkheid is om de variabele direct in het commando te definiëren:
ssh -t server.example.com 'export MYVAR="extra information"; mycommand'
Dus, als je een lokale variabele doorgeeft:
ssh -t server.example.com 'export MYVAR='"'$LOCALVAR'"'; mycommand'
Pas echter op voor citeerproblemen: de waarde van de variabele wordt direct geïnterpoleerd in de shell snippet die aan de andere kant wordt uitgevoerd. Het laatste voorbeeld hierboven gaat ervan uit dat $LOCALVAR
geen enkele aanhalingsteken bevat ('
).