bash期望在ssh连接期间如何将响应输出保存到变量

时间:2013-09-10 17:33:37

标签: macos bash ssh expect

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

我试过

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")"

2 个答案:

答案 0 :(得分: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')"

答案 1 :(得分:0)

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 )