Expect 脚本命令行参数示例
【摘要】 本文解释了可以传递给期望脚本的命令行选项。
如果您不熟悉脚本语言,请首先从我们的expect hello world 示例开始。
本文解释了可以传递给期望脚本的命令行选项。
如果您不熟悉脚本语言,请首先从我们的expect hello world 示例开始。
1.使用-c选项从命令行执行expect脚本
expect 还允许您使用 -c 选项直接在命令行中执行它,如下所示。
$ expect -c 'expect "\n" {send "pressed enter\n"}
pressed enter
$
运行上述脚本后,它会等待换行符(\n),并在按下回车键后,将打印消息“pressed enter”并退出。
2. 使用 -i 选项以交互方式执行期望脚本
Expect 脚本可以通过使用 -i 选项从标准输入读取命令以交互方式运行,如下所示。
$ expect -i arg1 arg2 arg3
expect1.1>set argv
arg1 arg2 arg3
expect1.2>
通常,当您在没有 -i 选项的情况下运行上述期望命令时,它会将 arg1 视为脚本文件名,因此 -i 选项会使参数列表不间断。
当您使用 -c 标志运行期望脚本时,此选项很有用。因为默认情况下,expect 以交互方式运行。
3. 执行expect脚本时打印调试信息
当您使用 -d 选项运行代码时,您可能会启用要打印的诊断消息,如下所示。
$ cat sample.exp
# !/usr/bin/expect -f
expect "\n";
send "pressed enter";
$ expect -d sample.exp
expect version 5.43.0
argv[0] = expect argv[1] = -d argv[2] = sample.exp
set argc 0
set argv0 "sample.exp"
set argv ""
executing commands from command file sample.exp
expect: does "" (spawn_id exp0) match glob pattern "\n"? no
expect: does "\n" (spawn_id exp0) match glob pattern "\n"? yes
expect: set expect_out(0,string) "\n"
expect: set expect_out(spawn_id) "exp0"
expect: set expect_out(buffer) "\n"
send: sending "pressed enter" to { exp0 pressed enter}
4.使用-D启用expect调试器
-D 选项用于启用调试器,它只将布尔值作为参数。这将指示调试器是否必须启动或只是初始化它并在以后使用它。
$ expect -D 1 script
-D 选项左侧之前的选项将在调试器之前处理。然后其余的命令将在启动调试器后执行。
$ expect -c 'set timeout 10' -D 1 -c 'set a 1'
1: set a 1
dbg1.0>
5.逐行执行expect脚本
通常期望在执行之前将整个脚本读入内存。-b 选项使期望一次读取脚本一行。当您到那时还没有完全编写并期望开始执行它并因此避免写入临时文件时,这可能很有用。
$ expect -b
6. 使命令行参数不被解释
您可以使用 --flag 使期望不解释命令行参数。
通常你会阅读如下所示的命令行参数。
$ cat print_cmdline_args.exp
#!/usr/bin/expect
puts 'argv0 : [lindex $argv 0]';
puts 'argv1 : [lindex $argv 1]';
在执行上述脚本时,传递命令行选项,它将被视为一个参数(而不是期望选项),如下所示。
$ expect print_cmdline_args.exp -d -c
argv0 : -d
argv1 : -c
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)