【问题标题】:bash expect how to save respond output to a variable during the ssh connectionbash期望如何在ssh连接期间将响应输出保存到变量
【发布时间】:2017-05-23 04:58:49
【问题描述】:

我 ssh 进入一台机器。我做了一个发送命令。我想将所有这些输出捕获到一个变量中。

我试过了

output=$(send "rpm -i mypkg.rpm\r")

但它不起作用。有什么想法吗?

错误信息

")": no such variablean't read "(send ""rpm -i mypkg.rpm
while executing
"output=$(send "rpm -i mypkg.rpm\r")"

【问题讨论】:

  • 实际代码中等号后面的空格吗?如果是,请将其删除。应该是output=$( ...,没有空格
  • 谢谢,但不是这个问题
  • 远程机器运行的是什么shell?看起来它无法将 $(...) 识别为命令替换,并且正在将 \r 处理为回车符,从而导致出现乱码的错误消息。

标签: macos bash ssh expect


【解决方案1】:

作为already stated by user000001= 后面有一个空格字符,这在 bash 中不起作用,因为 bash 会将其解释为带参数的命令。
但是在 ssh 会话中捕获命令输出有什么意义呢?很可能你想从你的客户端机器上得到它,所以这里是代码:

output=$(ssh myhost 'rpm -i mypkg.rpm')

如果您以这种方式执行某些程序,它们会发疯,那是因为没有终端。您可以通过使用带有 ssh 的 -t 标志来强制分配伪 tty。

你更新了你的问题:

"output=$(send "rpm -i mypkg.rpm\r")" - 这里的问题是你的引用。您可以通过混合不同类型的报价来解决这个问题。例如:

"output=$(send 'rpm -i mypkg.rpm\r')"

【讨论】:

  • @runco​​de 我已经更新了我的答案,但是请告诉我们你的真实代码,目前我没有额外的感知来猜测问题可能是什么:)
【解决方案2】:

Expect中创建变量的语法例如: set output "some content"

要使用最后一个命令运行设置变量output,您可以这样做:

send "rpm -i mypkg.rpm\r"          // send the command
expect '#'                         // wait for the prompt
set output $expect_out(buffer);    // store the output in 'output' variable

我认为Bash 语法在这里不起作用(output=$( command )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-08
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2022-10-15
    相关资源
    最近更新 更多