Jake88
Jake88

Reputation: 965

Bad spawn_id while executing expect command

I am writing a script that will copy Valgrind onto whatever shelf that we enter on the command line. The syntax is as follows:

vgrindCopy [shelf number]

For some reason, the files will copy over without any issue, but after the copy completes the follow error is observed:

bad spawn_id (process died earlier?) while executing "expect "#""

Here is a copy of the relevant code:

 function login_shelf {
    expect -c "
    set timeout 15 
    spawn $1 
    expect \"password:\"
    send \"$PW\r\"
    expect \"#\"
    sleep 1
    exit
    "
    }
# login and make the valgrind directory at /sfs/software/shelf/current
set -- /opt/swe/tools/ext/gnu/valgrind-3.7.0/i686-linux2.6/lib/valgrind/*
login_shelf "/opt/corp/projects/shelftools/bin/app rsync -Lau $* $shelf:/shelf/valgrind" 

After playing around with the code, I found that if I remove the line "expect \"#\"", then the program doesn't copy any of the files over anymore. What odd as well is that I'm seeing the issue when I run the script, but a co-worker is not.

Has anyone had a similar issue and determined the cause? Any help would be greatly appreciated as always!

Upvotes: 1

Views: 938

Answers (1)

Douglas Leeder
Douglas Leeder

Reputation: 53310

Your code is spawning the rsync and at the expect \"#\" is waiting for rsync to output a #, which it never does, so it exits and expect reports the error.

When you remove the expect \"#\" the expect script exits, terminating the rsync.

Instead of expect \"#\" you should wait for rsync to exit:

expect eof
wait

Upvotes: 1

Related Questions