我试图使用脚本自动部署一些.deb包。我想sudo dpkg -i $myDeb.deb
在我可以使用ssh访问的远程机器列表中执行。
我试图在bash脚本中使用'expect'自动执行命令,但我显然做错了,因为我得到了许多不同的错误(取决于我把引号放在哪里,基本上)
这是我的功能(将通过以下方式调用:_remoteInstallation "myPackage115.deb" "192.168.1.55"
。我知道在远程机器中,.deb将位于$ HOME / Documents /中:
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: invalid option -- 't'
如果我将其更改为:
spawn /usr/bin/ssh -t borrajax@$remoteMachine '/usr/bin/sudo /usr/bin/dpkg -i /home/borrajax/Documents/$debToInstall'
它看起来像是尝试在本地运行sudo dpkg命令(首先是ssh(s)到'$ remoteMachine'然后在本地运行sudo dpkg,就像两个单独的命令一样)
有了这个:
spawn '/usr/bin/ssh -t borrajax@$remoteMachine \'/usr/bin/sudo /usr/bin/dpkg -i /home/borrajax/Documents/$debToInstall\''
我明白了couldn't execute "'/usr/bin/ssh": no such file or directory
(这不是真的)
......在这一点上,我的想法用完了...... :-)
任何提示将不胜感激。谢谢。