Передавать переменные в удаленный сценарий через SSH

Я запускаю сценарии на удаленном сервере с локального сервера через SSH. Сценарий сначала копируется с использованием SCP, а затем вызывается при передаче некоторых аргументов следующим образом:

scp /path/to/script server.example.org:/another/path/

ssh server.example.org \
MYVAR1=1 \
MYVAR2=2 \
/another/path/script

Это работает нормально, и на удаленном сервере переменные MYVAR1 и MYVAR2 ] доступны с соответствующими значениями.

Проблема в том, что эти сценарии находятся в постоянной разработке, что требует изменения команды SSH каждый раз, когда переменная переименовывается, добавляется или удаляется.

Я ищу способ передачи всех локальных переменных среды в удаленный сценарий (поскольку MYVAR1 и MYVAR2 на самом деле являются локальными переменными среды), который решит проблему обслуживания команды SSH.

Поскольку

MYVAR1 = 1 \ и MYVAR1 = 1 \ - это строки, которые следуют за выходными данными команды env . Я попытался заменить их фактической командой следующим образом:

ssh server.example.org \
`env`
/another/path/script

Это кажется для работы с "простыми" env строками вывода (например, SHELL = / bi n / bash или LOGNAME = sysadmin ), однако я получаю ошибки для более "сложных" строк вывода (например, LS_COLORS = rs = 0: di = 01; 34: ln = 01; [...] , что дает такие ошибки, как -bash: 34: ln = 01: команда не найдена ). Я могу избавиться от этих ошибок, отключив переменные, соответствующие этим сложным строкам вывода, перед запуском команды SSH (например, unset LS_COLORS , затем ssh [...] ), однако я не Я не считаю это решение очень надежным.

Q: Кто-нибудь знает, как передать все локальные переменные среды в удаленный сценарий через SSH?

PS: локальные переменные среды не являются переменными среды, доступными на удаленной машине , поэтому я не могу использовать это решение .

Обновление с решением

Я закончил использовать sed для форматирования вывода команды env из VAR = VALUE - VAR = "VALUE" (и объединение всех строк в 1), что не позволяет bash интерпретировать некоторые выходные данные как команды и устраняет мою проблему.

ssh server.example.org \
`env | sed 's/\([^=]*\)=\(.*\)/\1="\2"/' | tr '\n' ' '` \
"/another/path/script"

5
задан Community 23 May 2017 в 12:17
поделиться