Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何使用带有可选提示的expect?_Linux_Bash_Expect - Fatal编程技术网

Linux 如何使用带有可选提示的expect?

Linux 如何使用带有可选提示的expect?,linux,bash,expect,Linux,Bash,Expect,假设我正在尝试为test.sh编写一个expect脚本,它有三个提示:prompt1、prompt2、prompt3 我的代码如下: spawn test.sh 期待“及时1” 发送“pass1” 期待“及时2” 发送“pass2” 期待“及时3” 发送“pass3” 然而,prompt2只出现一半的时间。如果prompt2没有出现,expect脚本将中断。如果prompt2没有出现,我将如何编写跳过它的expect代码 编辑: 修正了我的代码: /usr/bin/expect-c' spaw

假设我正在尝试为test.sh编写一个expect脚本,它有三个提示:prompt1、prompt2、prompt3

我的代码如下:

spawn test.sh
期待“及时1”
发送“pass1”
期待“及时2”
发送“pass2”
期待“及时3”
发送“pass3”
然而,prompt2只出现一半的时间。如果prompt2没有出现,expect脚本将中断。如果prompt2没有出现,我将如何编写跳过它的expect代码

编辑:

修正了我的代码:

/usr/bin/expect-c'
spawn./test.sh
期待{
“提示1”{
发送“pass1\r”
exp\u继续
}
“提示2”{
发送“pass2\r”
exp\u继续
}
“提示3”{
发送“pass3\r”
exp\u继续
}
}
互动回报
'

通过这种方式,脚本的其余部分将执行并提供输出。

您可以预期多种情况:

expect { 
    "prompt2" { 
        send "pass2"
        expect "prompt3"
        send "pass3"
    }
    "prompt3" {
        send "pass3"
    }
}

只要您有一个案例总是被期望命中,并且在这种情况下不包含
exp\u continue
,您就可以轻松删除重复并处理可选提示:

expect "prompt1"
send "pass1"
expect { 
    "prompt2" { 
        send "pass2"
        exp_continue
    }
    "prompt3" {
        send "pass3"
    }
}

哦,老兄,我没看到这一点,但这与我的修复几乎相同。如何避免
prompt3
/
pass3
代码重复?你需要
期望另一种模式能够打破循环。否则,你将永远无法进入
交互
行。我已经对公认的答案进行了投票,但这个答案要优雅得多(不要重复你自己)
exp\u continue
可以很好地解决可选的提示问题。这个问题很好。