Конечно, вы можете установить переменную окружения внутри команды, однако вы должны быть осторожны с цитированием: помните, что ваша оболочка будет анализировать вашу локальную командную строку, и тогда удаленная оболочка будет использовать строку получает.
Если вы хотите, чтобы переменная получала то же значение на сервере, что и на клиенте, попробуйте 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; экспорт MYVAR; МояКоманда»
Если даже LC_*
это не вариант, вы можете передать информацию в TERM
переменную окружения, которая всегда копируется (однако может быть ограничение длины). Вам все равно придется убедиться, что удаленная оболочка не ограничивает TERM
переменную для обозначения известного типа терминала. Передайте -t
параметр ssh, если вы не запускаете удаленную интерактивную оболочку.
env TERM = "дополнительная информация: $ TERM" ssh -t server.example.com 'MYVAR = $ {TERM%: *}; TERM = $ {TERM ## *:}; экспорт MYVAR; МояКоманда»
Другая возможность - определить переменную непосредственно в команде:
ssh -t server.example.com 'export MYVAR = "дополнительная информация"; МояКоманда»
Таким образом, если передать локальную переменную:
ssh -t server.example.com 'export MYVAR =' "'$ LOCALVAR'" '; МояКоманда»
Однако остерегайтесь проблем с цитированием: значение переменной будет интерполировано непосредственно во фрагмент оболочки, выполненный на удаленной стороне. Последний пример выше предполагает, что $LOCALVAR
не содержит каких-либо одинарных кавычек ( '
).