É claro que pode definir a variável de ambiente dentro do comando, no entanto terá de ter cuidado ao citar: lembre-se de que a sua concha vai analisar a sua linha de comando local, e depois a concha remota terá um movimento sobre a corda que recebe.
Se quiser que uma variável obtenha o mesmo valor no servidor que tem no cliente, tente a opção SendEnv
:
ssh -o SendEnv=MYVAR server.example.com mycommand
Isto requer, no entanto, o apoio do servidor. Com OpenSSH, o nome da variável tem de ser autorizado em /etc/sshd_config
.
Se o servidor permitir apenas certos nomes de variáveis específicas, pode contornar isso; por exemplo, uma configuração comum permite LC_*
através, e pode fazer o seguinte:
ssh -o SendEnv=LC\_MYVAR server.example.com 'MYVAR=$LC\_MYVAR; unset LC\_MYVAR; export MYVAR; mycommand'
Se mesmo LC_*
não for uma opção, pode passar informação na variável TERM
de ambiente, que é sempre copiada (pode haver, no entanto, um limite de comprimento). Terá ainda de se certificar de que a shell remota não restringe a variável TERM
para designar um tipo de terminal conhecido. Passe a opção -t
para ssh se não estiver a iniciar uma shell interactiva remota.
env TERM="extra information:$TERM" ssh -t server.example.com 'MYVAR=${TERM%:\*}; TERM=${TERM##\*:}; export MYVAR; mycommand'
Outra possibilidade é definir a variável directamente no comando:
ssh -t server.example.com 'export MYVAR="extra information"; mycommand'
Assim, se passar uma variável local:
ssh -t server.example.com 'export MYVAR='"'$LOCALVAR'"'; mycommand'
Contudo, cuidado com as questões de citação: o valor da variável será interpolado directamente para o snippet da concha executado no lado remoto. O último exemplo acima assume que $LOCALVAR
não contém nenhuma aspas simples ('
).