Как локальная и удаленная переменная внутри команды SSH доступны локально - PullRequest
0 голосов
/ 18 октября 2018

Это вариант вопроса здесь: Каким образом локальная и удаленная переменные внутри команды SSH

Как получить «ssh-переменную» B на моем локальном компьютере?

 A=3
 ssh host@name "echo $A; B=5; echo $A; echo \$B;"
 echo $A
 echo $B
 echo \$B

возвращает 3, НИЧЕГО, $ B

Как локально получить доступ к значению для B?

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

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

Я надеялся наЛегкое, тонкое решение, которое можно интегрировать и легко прочитать с помощью команды, подобной этой:

 ssh host@name "ws_allocate myworkspace; workspace=ws_find myworkspace;"

, а затем локально использовать $ workspace.Это часть большого bash-скрипта, который должен быть понятен для неопытных пользователей bash (таких как я) ...

Оказывается, это дубликат bash - лучший способ храненияпеременная между запусками?

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Хорошо, поэтому решение, которое мне кажется самым простым и позволяет хранить значение $ B на удаленном хосте, состоит в том, чтобы сохранить его в файле.Как уже было описано и обсуждено здесь: bash - лучший способ хранения переменных между запусками? : (*

ssh ${supercomputer} "
ws_list -a >workspaces.txt;
if grep -q "${experiment}" workspaces.txt; 
then echo 'we have a workspace already'; 
else ws_allocate ${experiment} 30; 
fi; 
ws_find ${experiment} > mypathtoworkspace;"

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

Я хотел использовать путь к удаленному рабочему пространству локально, например,

 echo "${workspace}"

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

Если кто-то найдет лучшее решение, то это приветствуется!

0 голосов
/ 18 октября 2018

Вы можете сделать что-то вроде этого:

X=$(ssh user@host 'echo $X')

Это запустит echo $X на сервере и поместит полученный результат в локальную переменную X, которую вы позже сможете использоватьсказав $X

Таким образом, чтобы применить это к вашему примеру, вы могли бы сказать:

workspace=$(ssh host@name 'ws_allocate myworkspace; ws_find myworkspace;')

Обратите внимание, что локальная переменная workspace будет содержать вывод команды, которая выполняетсяудаленно.Поэтому я предполагаю, что в вашем примере only ws_find myworkspace напечатает любой вывод и что вызов ws_allocate будет беззвучным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...