我想写的是从git仓库拉最新版本我的软件和更新配置文件的脚本。 当从回购拉动,虽然,我必须输入密码。 我希望脚本自动一切,所以我需要它自动填充它在我。 我发现这个网站,介绍了如何使用“预期”寻找密码提示,并发送密码。 我不能让它工作,虽然。 这里是我的脚本:
#!/usr/bin/expect -f
set password [lrange $argv 0 0]
set timeout -1
clear
echo "Updating Source..."
cd sourcedest
git pull -f origin master
match_max 100000
# Look for passwod prompt
expect "*?assword:*"
# Send password aka $password
send -- "$password\r"
# send blank line (\r) to make sure we get back to gui
send -- "\r"
expect eof
git checkout -f master
cp Config/database.php.bak Config/database.php
cp webroot/index.php.bak webroot/index.php
cp webroot/js/config.js.bak webroot/js/config.js
我究竟做错了什么? 这里的网站我是从: http://bash.cyberciti.biz/security/expect-ssh-login-script/
这是相当多从注释中取出,用我自己的一些看法。 但似乎没有人想提供一个真正的答案,所以这里有云:
你的问题是你有一个期望脚本,你喜欢一个bash脚本处理它。 期待不知道什么cd
, cp
,和git
意思。 bash所做的。 你想要的是一个bash脚本,使呼叫期待。 例如:
#!/usr/bin/env bash
password="$1"
sourcedest="path/to/sourcedest"
cd $sourcedest
echo "Updating Source..."
expect <<- DONE
set timeout -1
spawn git pull -f origin master
match_max 100000
# Look for passwod prompt
expect "*?assword:*"
# Send password aka $password
send -- "$password\r"
# send blank line (\r) to make sure we get back to gui
send -- "\r"
expect eof
DONE
git checkout -f master
cp Config/database.php.bak Config/database.php
cp webroot/index.php.bak webroot/index.php
cp webroot/js/config.js.bak webroot/js/config.js
然而,由于在larsks的评论中指出的,你可能会使用SSH密钥会更好。 然后,你可以摆脱expect
干脆打电话。