包含文件 source ../config/config_$cfg.cfg 从自动执行状态切换到手动交互输入 interact 定义变量 set work_home "/work/"set zdat
包含文件
source ../config/config_$cfg.cfg
从自动执行状态切换到手动交互输入
interact
定义变量
set work_home "/work/"set zdate [exec date +%Y%m%d-%H%M%S]#获取三个月前的日期set back_date [exec sh -c {date -d '3 month ago' +'%Y%m%d%H%M%S' }]#字符串截取set save_date [string range $back_date 0 5]
定义写log函数
proc log {msg} { #写日志的同时将消息打印在屏幕上 puts "$msg/n" send_log "$msg/n" }
指定log文件位置
log_file "$work/../shell/log/export-ipa.log"
设置脚本超时时间
expect中等待命令的输出信息是有一个timeout的设定的,默认是10秒。这个特性是防止那些执行死机的命令的。一旦到了这个timeout,还是没有屏幕输出的话,expect脚本中下面的代码就会执行。或者我们在expect脚本中如果定义了timeout的响应代码的话,这些代码就会被执行。
set timeout 3600expect { log 脚本超时 timeout {exit 127 }}
当执行命令内包含正则匹配字符时使用bash -c执行
spawn bash -c "cp -rf $work/AssetBundle/Android/* $work/Assets/StreamingAssets/"
当前一个命令有多种返回可能时
expect { -re eof { send "/n" } -re {Enter passphrase for key} { send "123456/n" expect eof }}
等待前一个命令执行结束
expect eof
当执行命令有很多转移字符时使用大括弧包含里边的内容会原样输出不进行转移,一定要注意的是大括弧内不可以有变量,因为不会进行变量替换
需要转义的符号列表
/ 需转义为 ///} 需转义为 /}[ 需转义为 /[$ 需转义为 ///$` 需转义为 /`" 需转义为 ///"
最佳方法是用'send --'来输入含有特殊字符的字符串。
比如,密码是“-dafd@f12&-a”send -- "-dafd@f12&-a"
too many programs spawned? could not create pipe: too many open files
解决方法https://stackoverflow.com/questions/19774016/terminating-spawn-sessions-in-expectspawn xxxexpect eofwait
删除指定日期文件
spawn bash -c "find /work/zhulangren/back/db -type d -mtime +30 -exec rm -rf {} //;"expect eof