【问题标题】:How to read expect output in bash variable?如何读取 bash 变量中的期望输出?
【发布时间】:2015-09-08 05:48:35
【问题描述】:

我使用expect tu 验证ssh 的密码。 我试图通过 puts 输出 但我只是在字符串中得到服务器响应的结尾。

我如何只获得看跌期权的价值?

okk=$(expect -c "
set timeout 15
spawn ssh -p 22 user@server.com 
expect {
    \"(yes/no)\" {
        sleep 1
        send \"yes\n\"
        exp_continue
    }
    \"(y/n)\" {
        sleep 1
        send \"y\n\"
        exp_continue
    }
    password {
        sleep 1
        send \"$sshpw\r\"
        exp_continue
    }
    Password {
        sleep 1
        send \"$sshpw\r\"
        exp_continue
    }
    \"Last login\" {
        puts \"yes\"
        exit 1
    }
    \"Permission denied\" {
        return \"no\" 
        exit 1
    }
    timeout {
        puts \"timeout\"
        exit 1
    }
    eof {
        puts \"error\"
    }
}
sleep 1
expect eof
")

echo $okk

onsectetur。 Donec ut libero sed arcu vehicula 不侵权。 Lorem ipsum dolor sit amet, consectetur adipiscing elit。 Aenean ut gravida lorem。 Ut turpis felis,pulvinar a semper sed,adipiscing id dolor。 Pellentesque auctor nisi id magna consequat sagittis。 Curabitur dapibus enim sat amet elit pharetra tincidunt feugiat nis

【问题讨论】:

  • 您根本看不到变量中的puts 字符串吗?或者您看到它们但也看到服务器输出?您确定您正在处理您的puts 案例之一吗?
  • 问题末尾那堆“拉丁”内容的目的是什么?这里的大多数人都无法理解它,因此它不会为您的问题或代码提供有用的附加信息。您是否只是想通过在其中添加更多“单词”来使其看起来像一个“更好”的问题?
  • stackoverflow 没有让我发布我的问题,因为它没有包含足够的文本。所以我喂它 lorem ipsum (这是一个虚拟文本)

标签: bash expect


【解决方案1】:

需要进行两项更改以过滤除puts 的输出之外的所有内容:

  1. 使用spawn -noecho ssh -p 22 user@server.com

  2. set timeout 15之后添加log_user 0

警告:如果您在 EXPECT 世界中遇到不打印任何内容的案例,您将在 BASH 世界中得到一个空字符串。所以,照顾好这个!

【讨论】:

    猜你喜欢
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2022-10-15
    • 1970-01-01
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多