如何多次'期待'某事?

时间:2013-11-22 09:05:17

标签: bash expect

我使用以下脚本来处理expect的多个用户输入:

#!/usr/bin/bash

TEST1="Test text"
TEST2="Hello World"

expect -c '
    spawn /home/alexander/read.sh
    expect -re "Please enter some input:.*"
    send "'"$TEST1"'\r\n"
    expect -re "Please enter other input:.*"
    send "'"$TEST2"'\r\n"
    '

这是一个不同的版本:

#!/usr/bin/bash

TEST1="Test text"
TEST2="Hello World"

expect -c '
    spawn /home/alexander/tasks/update/test/Expect/read.sh
    expect {
       "Please enter some input:" { send "'"$TEST1"'\r"  }
       exp_continue
    }
    expect {
        "Please enter other input:" { send "'"$TEST2"'\r" }
    }
    '

read.sh脚本如下所示:

#!/bin/bash

read -p "Please enter some input: " input_variable
echo "You entered: $input_variable"
read -p "Please enter other input: " other_variable
echo "You entered: $other_variable"

当我单独执行read.sh时,我会被要求输入两次,这也会打印到stdout。另一方面,expect脚本似乎不处理第二个输入。我得到的输出如下:

spawn /home/alexander/read.sh
Please enter some input: Test text

You entered: Test text
Please enter other input: 

我做错了什么,如何解决这个问题?

备注:

  • 脚本需要是bash-shebang的bash脚本。
  • 在第一个脚本中添加exp_continue会导致command returned bad code: -101错误。

1 个答案:

答案 0 :(得分:2)

这有效:

#!/bin/bash

TEST1="Test text"
TEST2="Hello World"

expect -c '
    spawn /tmp/read.sh
    expect {
       "Please enter some input:" { send "'"$TEST1"'\r"
                                   exp_continue
                                  }
        "Please enter other input:" { send "'"$TEST2"'\r"
                                      exp_continue
                                    }
    }'