gpt4 book ai didi

bash - 期望脚本返回值

转载 作者:行者123 更新时间:2023-12-05 08:57:27 27 4
gpt4 key购买 nike

我在 Bash 脚本中包含简单的 Expect 命令(我知道我可以只编写一个纯 Expect 脚本,但我想让它在 Bash 中运行)。

脚本如下:

#!/bin/bash

OUTPUT=$(expect -c '
spawn ssh mihail911@blah.org
expect "password:"
send "dog\r"
')

通过 ssh 连接到上述地址后,它会在提示符处返回格式为 mihail911's password: 的内容,所以我认为我的期望行是有效的。

当我运行它时,我的脚本没有打印任何东西。它甚至不显示 password: 提示。一般来说,即使我手动提供了一个错误的密码,我也会收到一个Incorrect password类型的响应提示。为什么不打印任何内容?如何让我的脚本正确执行?

我已经尝试使用 -d 标志进行调试,它似乎表明至少第一个 expect 提示匹配正确。

此外,我应该在 OUTPUT 变量中期望什么值?当我 echo 这个变量时,它只打印脚本预期部分的第一个命令,然后打印 mihail911 的密码:。这是它应该打印的内容吗?

最佳答案

使用:

#!/bin/bash
OUTPUT=$(expect -c '
# To suppress any other form of output generated by spawned process
log_user 0
spawn ssh dinesh@xxx.xxx.xx.xxx
# To match some common prompts. Update it as per your needs.
# To match literal dollar, it is escaped with backslash
set prompt "#|>|\\$"
expect {
eof {puts "Connection rejected by the host"; exit 0}
timeout {puts "Unable to access the host"; exit 0;}
"password:"
}
send "root\r"
expect {
timeout {puts "Unable to access the host"; exit 0;}
-re $prompt
}
send "date\r"
# Matching only the date cmd output alone
expect {
timeout { puts "Unable to access the host";exit 0}
-re "\n(\[^\r]*)\r"
}
send_user "$expect_out(1,string)\n"
exit 1
')
echo "Expect's return value: $?"; # Printing value returned from 'Expect'
echo "Expect Output: $OUTPUT"

输出:

dinesh@MyPC:~/stackoverflow$ ./Meric
Expect's return value: 1
Expect Output: Wed Sep 2 09:35:14 IST 2015
dinesh@MyPC:~/stackoverflow$

关于bash - 期望脚本返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32341234/

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