Конечно, вы можете задать переменную окружения внутри команды, но вам нужно быть осторожным с цитатами: помните, что ваша оболочка будет разобрать вашу локальную командную строку, а затем удаленная оболочка начнет работать со строкой, которую она получит.
Если вы хотите, чтобы переменная получала на сервере то же значение, что и на клиенте, попробуйте опцию SendEnv
:
ssh -o SendEnv=MYVAR server.example.com mycommand
Это требует поддержки со стороны сервера. В OpenSSH имя переменной должно быть авторизовано в /etc/sshd_config
.
Если сервер разрешает только определенные имена переменных, вы можете работать с этим; например, общая настройка разрешает LC_*
сквозной, и вы можете сделать следующее:
ssh -o SendEnv=LC\_MYVAR server.example.com 'MYVAR=$LC\_MYVAR; unset LC\_MYVAR; export MYVAR; mycommand'
Если даже LC_*
не является опцией, вы можете передать информацию в переменной окружения TERM
, которая всегда копируется (однако, может быть ограничение по длине). Вам все равно придется убедиться, что удаленная оболочка не ограничивает переменную TERM
для обозначения известного типа терминала. Передайте опцию -t
ssh, если вы не запускаете удаленную интерактивную оболочку.
env TERM="extra information:$TERM" ssh -t server.example.com 'MYVAR=${TERM%:\*}; TERM=${TERM##\*:}; export MYVAR; mycommand'
Другая возможность - определить переменную непосредственно в команде:
ssh -t server.example.com 'export MYVAR="extra information"; mycommand'
Таким образом, если вы передаете локальную переменную:
ssh -t server.example.com 'export MYVAR='"'$LOCALVAR'"'; mycommand'
Однако, остерегайтесь проблем с кавычками: значение переменной будет интерполировано непосредственно в фрагмент оболочки, выполняемый на удаленной стороне. Последний пример выше предполагает, что $LOCALVAR
не содержит ни одной кавычки ('
).