Shell expect script:将ls命令的输出设置为变量
我不熟悉shell脚本编写和使用不同的脚本语言 我正在编写一个expect脚本,其中我希望将ssh-ls命令的输出设置为要循环的变量,如下面的bash脚本Shell expect script:将ls命令的输出设置为变量,shell,unix,expect,Shell,Unix,Expect,我不熟悉shell脚本编写和使用不同的脚本语言 我正在编写一个expect脚本,其中我希望将ssh-ls命令的输出设置为要循环的变量,如下面的bash脚本 #!/bin/bash var=$(ssh user@host ls path | grep 'keyword') echo $var for x in $var; # do stuff done 但我不知道如何在expect脚本中实现这一点。我搜索的其他示例似乎是将send的输出设置为一个变量——这就是路径吗 谢谢你的帮助 将已发送
#!/bin/bash
var=$(ssh user@host ls path | grep 'keyword')
echo $var
for x in $var;
# do stuff
done
但我不知道如何在expect脚本中实现这一点。我搜索的其他示例似乎是将send
的输出设置为一个变量——这就是路径吗
谢谢你的帮助 将已发送命令的输出捕获到expect变量实际上是一个PITA。捕获的输出包含命令和提示:假设您的提示是
“>”
,并且您发送了日期
命令。我们将看到:
"date\r\nTue Nov 15 11:34:16 EST 2016\r\n> "
因此,您需要执行以下操作以捕获输出:
send -- "date\r"
expect -re {^[^\n]+\n(.*)\r\n> $}
set output $expect_out(1,string)
在这种复杂的模式中:
将匹配您发送的命令(直到第一个换行符)--这是^[^\n]+\n
日期\r\n
是命令的输出(直到最后一行结束)(.*)\r\n
- expect将捕获的文本存储在变量
expect\u out(1,字符串)
- expect将捕获的文本存储在变量
是匹配提示的地方$
#!/usr/bin/env expect
spawn ssh user@host
expect -re {\$ $} ;# regular expression to match your prompt
send -- "ls path | grep keyword\r"
expect -re {^[^\n]+\n(.*)\r\n$ $}
set output $expect_out(1,string)
send -- "exit\r"
expect eof
puts $output
将已发送命令的输出捕获到expect变量实际上是一个PITA。捕获的输出包含命令和提示:假设您的提示是
“>”
,并且您发送了日期
命令。我们将看到:
"date\r\nTue Nov 15 11:34:16 EST 2016\r\n> "
因此,您需要执行以下操作以捕获输出:
send -- "date\r"
expect -re {^[^\n]+\n(.*)\r\n> $}
set output $expect_out(1,string)
在这种复杂的模式中:
将匹配您发送的命令(直到第一个换行符)--这是^[^\n]+\n
日期\r\n
是命令的输出(直到最后一行结束)(.*)\r\n
- expect将捕获的文本存储在变量
expect\u out(1,字符串)
- expect将捕获的文本存储在变量
是匹配提示的地方$
#!/usr/bin/env expect
spawn ssh user@host
expect -re {\$ $} ;# regular expression to match your prompt
send -- "ls path | grep keyword\r"
expect -re {^[^\n]+\n(.*)\r\n$ $}
set output $expect_out(1,string)
send -- "exit\r"
expect eof
puts $output
它说:无法读取“expect_out(1,string)”:没有这样的变量提示是否以美元符号和空格结尾?如果没有,则必须调整该正则表达式。它说:无法读取“expect_out(1,string)”:没有此类变量提示是否以美元符号和空格结尾?如果不是,则必须调整该正则表达式。