gpt4 book ai didi

linux - 是否可以设置 'expect' 的退出代码

转载 作者:IT王子 更新时间:2023-10-29 01:15:21 27 4
gpt4 key购买 nike

以下 bash 脚本不起作用,因为无论远程脚本/tmp/my.sh 返回哪个退出代码,命令“expect”总是返回 0。

有什么想法让它发挥作用吗?谢谢。

#!/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

编辑于 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 "$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

关于linux - 是否可以设置 'expect' 的退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20219931/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com