在shell中发送命令输出

时间:2017-12-11 11:30:27

标签: expect

以下是我尝试在shell脚本中使用expect执行的代码。

send "date +%d%m%y \n"  
set date1 "$expect_out(buffer)"  
puts "$date1"  
expect "#"  

我得到的输出是

date +%d%m%y  
111217

有没有办法抑制命令(日期+%d%m%y)并且只将输出存储在变量日期1中?

1 个答案:

答案 0 :(得分:0)

试试这个:期望看到6个数字作为整个单词

send "date +%d%m%y\r"         ;# typically we use \r to "hit enter"
expect -re {\m(\d{6})\M}
set date1 "$expect_out(1,string)"  
puts "$date1"  
expect "#"  

更一般地说,要选择第一行(命令)和最后一行(提示)之间的文本,您可以这样做:

lassign [regexp -inline {.*?\n(.*)\r\n#} $expect_out(buffer)] _ date1

其中_是一个抛弃变量,用于保存正则表达式的整个匹配文本,而date1只会保留捕获的文本。

有关Tcl正则表达式语法,请参阅https://tcl.tk/man/tcl8.6/TclCmd/re_syntax.htm

如果没有lassign,您可以写

regexp {.*?\n(.*)\r\n#} $expect_out(buffer) _ date1