Виклик функції зсередини функції


0

Я підключаюсь до сервера з 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
}

Дякую

Відповіді:


0

operations()Функція визначена в локальній оболонці.

Речі у вашому документі тут передаються на стандартний вхід віддаленої оболонки.

Оскільки ваша локальна оболонка та віддалена оболонка є двома різними процесами, це в основному означає, що ви просите віддалену оболонку запустити функцію, про яку ви ніколи не говорили про неї. Оскільки він не знає про функцію або псевдонім, який називається operations, він повертається до пошуку через ваш (віддалений) PATHі, коли не знаходить відповідну програму, видаляє помилку, яку ви бачите.

Три можливі рішення:

  1. Включіть тіло operations()свого документа тут і не переймайтесь функцією, як ви вже знайшли роботи.
  2. Включіть все визначення operations()у свій тут документ. Я не впевнений, якщо це набагато заробить вас у цьому конкретному випадку над варіантом 1, але в більш тривалому сценарії або якщо ви повторно використовуєте operations()це може бути кориснішим.
  3. Додайте operations()визначення у свій .bashrc або подібний автоматично завантажений файл на віддаленому комп'ютері. Це означає, що ви можете скинути визначення зі свого сценарію тут.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.