2013-03-25 2 views
0

Мне нужно запустить сценарий оболочки на другой машине. Общий вызов метода выглядит так:Как передать переменные среды в bash на другой машине

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] 'bash' < $GIT_ROOT/chip/sw/scripts/build.sh 

Из-за другие сценарии называют по build.sh Я не могу передать ему параметры. Насколько я знаю, если bash называется локально, он наследует переменные среды. Этого не происходит, если он вызывается на удаленном компьютере.

Кто-нибудь знает способ Я могу передать переменную окружения в bash на удаленном поле? Или, возможно, есть лучший способ вызвать build.sh на удаленной системе, которая может использовать переменные локальной среды.

+1

Если вы не можете отредактировать фактический 'build.sh', вы сможете создать сценарий оболочки, который примет ваши переменные окружения в качестве аргументов, экспортирует их в сценарий оболочки, а затем просто вызовет build.sh из этой подоболочки , – Jite

+0

Или просто, когда я думаю об этом, в зависимости от того, как вы это сделаете, вы должны иметь возможность просто «экспортировать VAR = $ VAR; export OTHERVAR = $ OTHERVAR ...; build.sh' как команду для отправки на удаленный хост. Набор переменных среды будет _only_ действителен для этой подоболочки еще. – Jite

ответ

1

Лучший способ сделать это - использовать -o SendEnv=YOURVARIABLE, но он работает только в том случае, если сервер настроен на мягкое разрешение переменных. Если это не так, здесь возможны обходные пути:

Вы можете установить переменные в самой команде:

ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] \ 
    "export CFLAGS='$CFLAGS' LDFLAGS='$LDFLAGS'; bash" < $GIT_ROOT/chip/sw/scripts/build.sh 

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

Если у вас есть много переменных, и не хотите, чтобы разобраться в них, вы можете сбросить всю среду вместе со сценарием:

{ set; cat "$GIT_ROOT/chip/sw/scripts/build.sh" } | \ 
    ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null [email protected] 'bash' 

Это устанавливает все локальные переменные и функции на удаленной системе , но может вызвать проблемы, так как он не ограничивает его необходимыми переменными и переопределяет такие переменные, как PATH и DISPLAY.