Как я могу сохранить переменную удаленного сервера в локальной переменной сервера с s sh? - PullRequest
1 голос
/ 07 апреля 2020

Я делаю сценарий bash, который завершается, если на удаленном сервере есть указанный c файл и c содержимое.
Я проверяю файл с кодом ниже:

ssh $DEPLOY_HOST 'VAR=false

if [ -f /filename ]; then
    . /filename
    REMOTEID=$ID
        if [ "$REMOTEID" == "something" ]; then
                VAR=true
        fi
else
    echo "Missing /filename"
fi

if [ "$VAR" == false ]; then
    exit 1
fi
'

Но эта команда выхода не работает для локального сервера, поэтому выполняется последующий код, чего я не ожидаю.
Я думаю, что мне нужно получить переменную результата (VAR) с удаленного сервера, чтобы локальный сервер может решить, выходить или нет с переменной.
Как я могу решить эту проблему?
Спасибо :))

1 Ответ

1 голос
/ 07 апреля 2020

Попробуйте:

ssh $REMOTE 'test -e file' && exit

где file - имя файла на УДАЛЕННОМ сервере, который вы хотите проверить на существование.

Код выхода из * 1007 Команда * на удаленном сервере будет передаваться через код выхода ssh в вашу локальную оболочку и использоваться с оператором &&.


Если вам нужно вернуть строковое значение Переменная, вы можете использовать этот шаблон:

VAR=$(ssh $REMOTE '
{
    some command
    some other command
    ...
    # all of the stdout from these commands will be discarded
} > /dev/null
echo $VAR # the stdout from here will be returned as stdout from ssh
')

Давайте разберем это:

  • Блок {} группирует все команды, где мы хотим отменить стандартный вывод.
  • Одинарные кавычки '' фиксируют все команды, выполняемые на УДАЛЕННОМ сервере
  • Команда VAR=$(ssh ' ... ') извлекает стандартный вывод из echo $VAR и помещает его в локальную переменную с именем VAR.
...