Звичайно, ви можете встановити змінну середовища всередині команди, проте вам доведеться бути обережними при цитуванні: пам’ятайте, що ваша оболонка буде аналізувати ваш локальний командний рядок, і тоді віддалена оболонка матиме перехід на рядок отримує.
Якщо ви хочете, щоб змінна отримала таке саме значення на сервері, яке є у клієнта, спробуйте вибрати 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; зняти 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
не містить жодних цитат ( '
).