我 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")"
如user000001 所述,您有一个空格字符,后面的空格字符=
在 bash 中不起作用,因为 bash 会将其解释为带有参数的命令。
但是在 ssh 会话中捕获命令输出有什么意义呢?很可能你想从你的客户端机器上得到它,所以这里是代码:
output=$(ssh myhost 'rpm -i mypkg.rpm')
如果您以这种方式执行某些程序,它们会发疯,那是因为没有终端。-t
您可以通过使用带有 ssh 的标志来强制分配伪 tty 。
"output=$(send "rpm -i mypkg.rpm\r")"
- 这里的问题是你的报价。您可以通过混合不同类型的报价来解决这个问题。例如:
"output=$(send 'rpm -i mypkg.rpm\r')"
在其中创建变量的语法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 )