Ответ 1
Вы можете использовать команду typeset
, чтобы ваши функции были доступны на удаленном компьютере с помощью ssh
. В зависимости от того, как вы хотите запустить удаленный script, есть несколько вариантов.
#!/bin/bash
# Define your function
myfn () { ls -l; }
Чтобы использовать функцию на удаленных хостах:
typeset -f myfn | ssh [email protected] "$(cat); myfn"
typeset -f myfn | ssh [email protected] "$(cat); myfn"
Еще лучше, зачем беспокоиться о трубе:
ssh [email protected] "$(typeset -f myfn); myfn"
Или вы можете использовать HEREDOC:
ssh [email protected] << EOF
$(typeset -f myfn)
myfn
EOF
Если вы хотите отправить все функции, определенные в script, а не только myfn
, просто используйте typeset -f
так:
ssh [email protected] "$(typeset -f); myfn"
Объяснение
typeset -f myfn
отобразит определение myfn
.
cat
получит определение функции в виде текста, а $()
выполнит ее в текущей оболочке, которая станет определенной функцией в удаленной оболочке. Наконец, функция может быть выполнена.
Последний код поместит определение функций inline перед выполнением ssh.