Я подключаюсь к серверу с помощью ssh с помощью функции connect6 , затем мне нужно вызвать функцию operations из функции connect6 которая дополнительно выполняет свои команды.

Если я помещаю все команды функций operation функции connect6 я получаю желаемый результат, в противном случае я получаю сообщение об ошибке: No file or directory .

connect6 () {
ssh -q root@example.com << EOF
if [ $? -eq 0 ]; then
    echo "Successfully Logged into the Server"
else
    echo "Check your credentials"
    exit
fi
$(operations)
EOF
}

operations(){
        cd /var/dist/test/
        sudo ./o
        echo "line 2 line 3" | sudo tee -a test.323
        sudo ./c
}

Спасибо

1 ответ1

0

Функция operations() определена в вашей локальной оболочке.

Вещи в вашем документе здесь передаются на стандартный ввод вашей удаленной оболочки.

Поскольку ваша локальная оболочка и удаленная оболочка - это два разных процесса, это, в основном, означает, что вы просите удаленную оболочку запустить функцию, о которой вы никогда не говорили. Так как он не знает о функции или псевдониме, называемом operations , он возвращается к поиску по вашей (удаленной) PATH и, если ему не удается найти подходящую программу, выдает ошибку, которую вы видите.

Три возможных решения:

  1. Включите тело operations() в ваш документ здесь и не беспокойтесь о функции, так как вы уже нашли работы.
  2. Включите полное определение operations() в ваш документ здесь. Я не уверен, что это даст вам большую пользу в данном конкретном случае по сравнению с вариантом 1, но в более длинном сценарии или если вы повторно используете operations() это может быть более полезным.
  3. Добавьте определение operations() в ваш .bashrc или аналогичный файл автозагрузки на удаленном компьютере. Это будет означать, что вы можете удалить определение из своего скрипта здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .