我想用log_file命令捕获expect脚本的进度。在expect shell中发出以下命令之后,所有内容都会在日志文件中捕获。
expect1.1> log_file my.log
expect1.2> exec timedatectl status
Local time: St 2017-04-19 17:07:10 CEST
⋮
RTC in local TZ: no
但是,按照脚本运行会给我留下空日志。
#!/usr/bin/expect -f
log_file mylog.log
exec timedatectl stat
要编写更健壮的脚本,可以“忘记”expect buffer的内容,以确保只对最近接收到的输入进行匹配:
# this leaves expect buffer with unmatched history
# + accumulates incoming data over 1 sec
set timeout 1
expect
# match everything in the buffer ~"forget"
expect *
# subsequent expect commands will see only what appeared since now
有没有
在重新启动数十台UBUNTU服务器(12.04和14.04)之后,我想使用EXPECT脚本来装载卷。
我无法弄清楚如何设置主机名类似变量(例如,从/etc/hostname获取记录) ->,我不想为每个服务器创建一个脚本(设置特定的主机名)。我的想法是在我的环境中使用这个脚本全局。
下面的脚本运行良好--但是有设置的修复主机名
#!/usr/bin/expect -f
set timeout 90
set sudo_pass "Password01
set mount_pass "Password02"
set hostname "test-stagi
我有类似的代码来编写单元测试,在那里我需要检查变量的值。
#first.tcl
proc test {a} {
if {$a < 10} {
set sig 0
} else {
set sig 1
}
}
#second.tcl unit testing script
source "first.tcl"
test 10
expect 1 equal to $sig
test 5
expect 0 equal to $sig
有没有办法,我可以访问变量"sig“的值,因为我不能更改第一个脚本。
这里是我的expect脚本:
#!/usr/local/bin/expect -f
set force_conservative 0 ;# set to 1 to force conservative mode even if
;# script wasn't run conservatively originally
if {$force_conservative} {
set send_slow {1 .1}
proc send {ignore arg} {
sle
所以我在使用expect脚本制作TestCases时遇到了问题,我有大约10个TestCases,它们都以相同的“功能”开始和结束,比如登录和注销,或者关闭一些标志,有没有可能包括它们或者从我的脚本远程执行它们,比如spawn login.exp,或者更好地把它们放在函数中?
TC01.exp
#!/usr/bin/expect -f
set timeout 5
#example of getting arguments passed from command line..
#not necessarily the best practice for passwords though...
我正在用传统的调试方式调试一个expect程序,方法是为下面的脚本传递-D 1标志。
#!/usr/bin/expect
proc p3 {} {
set m 0
}
proc p2 {} {
set c 4
p3
set d 5
}
proc p1 {} {
set a 2
p2
set a 5
}
p1
使用调试器命令w,我试图查看堆栈帧并得到以下错误。
dinesh@mypc:~/pgms/expect$ expect -D 1 stack.exp
1: proc p3 {}
在我的Expect脚本中,这一行抛出了一个错误:
expect "Address or name of remote host [*]? "
在日志中,我看到以下错误:
switchnumber1#invalid command name "*"
while executing
"*"
invoked from within
"expect "Address or name of remote host [*]? ""
括号中的远程主机ip地址可能会更改。