Linux – bash script – spawn, send, interact – commands not found error

bashlinuxshell

I my shell script, I am trying to remove password prompt for scp command (as given in https://stackoverflow.com/questions/459182/using-expect-to-pass-a-password-to-ssh/459225#459225) and this is what I have so far :-

#!/usr/bin/expect
spawn scp $DESTINATION_PATH/exam.tar $SSH_CREDENTIALS':/'$PROJECT_INSTALLATION_PATH
expect "password:"
send $sshPassword"\n";
interact

On running the script, I am getting errors

spawn: command not found
send: command not found
interact: command not found

I was also getting error expect: command not found also, then I realised the path to expect was not correct and expect was not installed at all. So, I did yum install expect, corrected the path and the error was gone. But not able to remove the other 3 errors still.

Best Answer

You're invoking the script badly.

If you say:

bash scriptname

then the #! line is ignored and bash takes the file as though it were bash instructions. But this is not a bash script, it's an expect script.

The #! line is only ever interpreted by the kernel, when given the script as a command to run in its own right.

Either give the script execute permission, so that you can just invoke ./scriptname, or use the expect command to start the script.