Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to set exit code of 'expect'

Tags:

linux

ssh

expect

The following bash script doesn't work because command 'expect' always return 0 regardless which exit code of the remote script /tmp/my.sh returns.

any idea to make it work? thanks.

#!/usr/bash

user=root
passwd=123456abcd
host=10.58.33.21
expect -c "
  spawn ssh -o StrictHostKeyChecking=no -l $user $host bash -x /tmp/my.sh
  expect {
    \"assword:\" {send \"$passwd\r\"}
    eof          {exit $?}
  }
"
case "$?" in
  0) echo "Password successfully changed on $host by $user" ;;
  1) echo "Failure, password unchanged" ;;
  2) echo "Failure, new and old passwords are too similar" ;;
  3) echo "Failure, password must be longer" ;;
  *) echo "Password failed to change on $host" ;;
esac

Edited at 10:23 AM 11/27/2013

Thanks for the comments. Let me emphasis the problem once again,

The main script is supposed to run on linux server A silently, during which it invokes another script my.sh on server B unattended. The question is how to get exit code of my.sh?

That's why I cannot leverage ssl_key approach in my case, which requires at least one time configuration.

like image 752
Miles Chen Avatar asked Nov 26 '13 14:11

Miles Chen


1 Answers

#!/usr/bin/expect

set user root
set passwd 123456abcd
set host 10.58.33.21
set result_code 255

# exp_internal 1 to see internal processing
exp_internal 0

spawn ssh -o StrictHostKeyChecking=no -l $user $host bash -x /tmp/my.sh && echo aaa0bbb || echo aaa$?bbb
expect {
    "assword:"       {send "$passwd\r"; exp_continue}
    -re "aaa(.*)bbb" {set result_code $expect_out(1,string)}
    eof              {}
    timeout          {set result_code -1}
  }

switch $result_code {
  0 { puts "Password successfully changed on $host by $user" }
  1 { puts "Failure, password unchanged" }
  2 { puts "Failure, new and old passwords are too similar" }
  3 { puts "Failure, password must be longer" }
  -1 { puts "Failure, timeout" }
  default { puts "Password failed to change on $host" }
}
exit $result_code
like image 173
aver Avatar answered Oct 13 '22 15:10

aver