侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130562 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

expect 语法整理备忘

2023-12-06 星期三 / 0 评论 / 0 点赞 / 100 阅读 / 2580 字

包含文件 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

广告 广告

评论区