代码之家  ›  专栏  ›  技术社区  ›  Piyush Bhagat

在expect脚本中,grep的输出不保存在expect\u out(缓冲区)中

  •  -1
  • Piyush Bhagat  · 技术社区  · 7 年前

    我有一个脚本,它将文件按特定值进行grep,但grep的响应不会保存在expect\u out(缓冲区)中。以下是我的代码:

    #!/usr/bin/expect 
    
    set prompt "(%|>|#|\\$)"
    #set prompt "(%|>|\\$)"
    
    set pidBash [ spawn bash ]
    puts "\nStarting script....."
    
    send -- "\n"
    expect -re $prompt {}
    set output $expect_out(buffer)
    send -- "grep '^option' /home/pb791b/udhcpd.conf | grep lease\n"
    sleep 4
    expect -re $prompt {}
    
    set output $expect_out(buffer)
    set outputLines [split $output "\n"]
    set len [llength $outputLines]
    puts "\nlen: $len\n"
    for {set i 0} {$i<[expr $len]} {incr i} {
        set line [lindex $outputLines $i]
        puts "line $i: $line"
    }
    
    exec kill $pidBash
    puts "\nprocess Bash terminated"
    
    puts "End script."
    

    pb791b@pb791b-VirtualBox:~/devtest/ngs/base/Tests/shellScripts$ ./temp2.sh 
    spawn bash
    
    Starting script.....
    
    pb791b@pb791b-VirtualBox:~/devtest/ngs/base/Tests/shellScripts$ 
    grep '^option' /home/pb791b/udhcpd.conf | grep lease
    pb791b@pb791b-VirtualBox:~/devtest/ngs/base/Tests/shellScripts$ grep '^option' /home/pb791b/udhcpd.conf | grep lease
    option  lease   864000      # 10 days of seconds
    pb791b@pb791b-VirtualBox:~/devtest/ngs/base/Tests/shellScripts$ 
    len: 3
    
    line 0:  
    line 1: grep '^option' /home/pb791b/udhcpd.conf | grep lease
    line 2: pb791b@pb791b-VirtualBox:~/devtest/ngs/base/Tests/shellScripts$
    
    process Bash terminated
    End temp.sh script.
    pb791b@pb791b-VirtualBox:~/devtest/ngs/base/Tests/shellScripts$ 
    

    当我打印expect_out(buffer)时,它先打印grep命令,然后打印提示符,但缺少grep“option lease 864000#10天秒”的输出

    1 回复  |  直到 7 年前
        1
  •  0
  •   pynexj    7 年前

    移除 send -- "\n"

    set pidBash [ spawn bash ]
    puts "\nStarting script....."
    
    #send -- "\n"
    expect -re $prompt {}
    

    \n

    set pidBash [ spawn bash ]
    puts "\nStarting script....."
    
    send -- "\n"
    expect -re $prompt {}
    expect -re $prompt {}