I am trying to write a script that pulls the latest version of my software from a git repo and updates the config files. When pulling from the repo though, i have to enter a password. I want the script to automate everything, so I need it to automatically fill it in for me. I found this site that explained how to use "expect" to look for the password prompt and send the password. I can't get it to work though. Here's my script:
#!/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
What am I doing wrong? here's the site I got it from: http://bash.cyberciti.biz/security/expect-ssh-login-script/
This is pretty much taken from the comments, with a few observations of my own. But nobody seems to want to provide a real answer to this, so here goes:
Your problem is you have an expect script and you're treating it like a bash script. Expect doesn't know what
cd
,cp
, andgit
mean. Bash does. What you want is a bash script that makes a call to expect. For example:However, as larsks pointed out in the comments, you might be better off using ssh keys. Then you could get rid of the
expect
call altogether.