Я думаю, что Вы пропустили уровень выхода кавычек. На этом высоком уровне выхода, лучше просто делать немного сценария для каждого этапа, где иначе кавычки требовались бы.
Иначе Вы могли попробовать эту измененную версию (но обратите внимание, я не поощряю этот стиль кодирования!)
function _remoteInstallation(){
local retval=1
local debToInstall=$(basename "$1")
local remoteMachine="$2"
spawned=$(expect -d -c "
set timeout 1800
spawn \"/usr/bin/ssh -t borrajax@$remoteMachine /usr/bin/sudo /usr/bin/dpkg -i /home/borrajax/Documents/$debToInstall\"
expect {
\"Are you sure you want to continue connecting\" { send \"yes\r\"; exp_continue }
\"password\" { send \"myPassword\r\"; exp_continue }
\"[sudo] password\" { send \"myPassword\r\"; exp_continue }
default { exit 1 }
}
" )
retval=$?
return $retval
}
Почему люди всегда используют это ужасное expect
материал с ssh
? Используйте ssh ключи, и Вы сделаны (чтение на шифровании с открытым ключом для теории, просто используйте ssh-copy-id remotemachine
раз и навсегда для практики). Затем использование так же просто как
ssh remote-machine "remote-shell-command" > local-redirection-of-command-output
Как только Вы не должны манипулировать между 3 уровнями заключения в кавычки, Вы естественно запишете корректные команды.