Работает после сохранения всей функции в переменной (в виде строки) и последующего ее экспорта.
func='foo(){
hostname;
ls -la;
date; }'
Используя typeset
Я могу выполнить эту функцию на удаленном хосте через ssh
. Поскольку определение функции не было доступно внутри expect
, оно не сработало.
Вот мой полный сценарий:
#!/bin/bash
func='foo(){
hostname;
ls -la;
date; }'
ip='1.2.3.4'
pass='abcd'
export func ip pass
/usr/bin/expect <(cat <<-'EOF'
set timeout 60
spawn ssh $::env(ip) "$::env(func); foo"
expect {
"yes/no" {
send "yes\r"
exp_continue
}
"*assword*" { send "$::env(pass)\r" }
}
interact
EOF
)
echo -e "\nDone."
Решение отлично работает, но мне кажется глупым. Надеясь, что кто-то может дать лучшую альтернативу.