Я запускаю сценарии на удаленном сервере с локального сервера через 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"