it-roy-ru.com

Передача переменных в удаленную команду ssh

Я хочу иметь возможность запускать команды с моего компьютера с помощью ssh и проходить через переменную окружения $BUILD_NUMBER

Вот что я пытаюсь:

ssh [email protected] '~/tools/myScript.pl $BUILD_NUMBER'

$BUILD_NUMBER установлен на машине, выполняющей вызов ssh, и поскольку переменная не существует на удаленном хосте, она не принимается.

Как передать значение $BUILD_NUMBER?

72
Fergal

Если вы используете

ssh [email protected] "~/tools/run_pvt.pl $BUILD_NUMBER"

вместо

ssh [email protected] '~/tools/run_pvt.pl $BUILD_NUMBER'

ваш Shell будет интерполировать $BUILD_NUMBER перед отправкой командной строки на удаленный хост.

140
sarnold

Переменные в одинарных кавычках не оцениваются. Используйте двойные кавычки:

ssh [email protected] "~/tools/run_pvt.pl $BUILD_NUMBER"

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

25
Stephen

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

ssh [email protected] '~/tools/run_pvt.pl $BUILD_NUMBER'

Если вы действительно хотите установить переменную среды на удаленном хосте и использовать ее, вы можете использовать программу env

ssh [email protected] "env BUILD_NUMBER=$BUILD_NUMBER ~/tools/run_pvt.pl \$BUILD_NUMBER"

В этом случае это немного излишне, и обратите внимание

  • env BUILD_NUMBER=$BUILD_NUMBER выполняет мета-расширение на локальном Host
  • переменная окружения BUILD_NUMBER будет использоваться
    Удаленная оболочка
0
Gilles Gouaillardet