加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 是否可以设置’expect’的退出代码

发布时间:2020-12-13 23:09:31 所属栏目:Linux 来源:网络整理
导读:以下bash脚本不起作用,因为命令’expect’始终返回0,无论远程脚本/tmp/my.sh返回哪个退出代码. 任何让它成功的想法?谢谢. #!/usr/bashuser=rootpasswd=123456abcdhost=10.58.33.21expect -c " spawn ssh -o StrictHostKeyChecking=no -l $user $host bash -
以下bash脚本不起作用,因为命令’expect’始终返回0,无论远程脚本/tmp/my.sh返回哪个退出代码.

任何让它成功的想法?谢谢.

#!/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 "$passwdr"}
    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

编辑于2013年11月27日上午10:23

感谢您的评论.让我再次强调这个问题,

主脚本应该在Linux服务器A上静默运行,在此期间它会无人值守地调用服务器B上的另一个脚本my.sh.问题是如何获得my.sh的退出代码?

这就是为什么我不能在我的情况下利用ssl_key方法,这需要至少一次时间配置.

解决方法

#!/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 "$passwdr"; 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读