I am trying to write a script that pulls the latest version of my software from a Git repository and updates the configuration files. When pulling from the repository 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
, and git
mean. Bash does. You want a Bash script that makes a call to Expect. For example:
#!/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 password prompt
expect "*?assword:*"
# Send password aka $password
send -- "$password\r"
# Send blank line (\r) to make sure we get back to the 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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With