19,612
社区成员
发帖
与我相关
我的任务
分享
#!/usr/bin/expect
#....... 设置常用的密码组合元素
set m_pw(0) ~
set m_pw(1) !
set m_pw(2) #
set m_pw(3) $
set m_pw(4) %
set m_pw(5) a
set m_pw(6) bbq
set m_pw(7) ttz
## 设置数组长度为m_pw 数组的长度
set lens 8
## 二层组合的穷举。一层组合,还是三层、四层组合,根据自己情况去改
for {set i 0} {$i < $lens} {incr i} {
for {set j 0} {$j < $lens} {incr j} {
#设置组合密码
set pw "$m_pw($i)$m_pw($j)"
spawn hdiutil attach /Users/Marvin/Documents/person/mySecret.dmg
expect "密码" { send "$pw\n" }
expect eof #退出
wait #结束子进程---必不可少的一行,否则会因子进程挂载太多程序异常退出
#打印密码
spawn echo "密码============$pw"
expect eof #退出
wait #结束子进程---必不可少的一行,否则会因子进程挂载太多程序异常退出
}
}
注意:每一个spawn后面,一定要有 expect eof 和 wait 两行命令
否则会报错“too many programs spawned? could not create pipe: too many open files”
核心原因是因为spawn打开的子进程没有关闭,导致系统进程池用完了。
这个细节,我在网上找了一个多小时,并通过ps aux | grep <spawn进程号> 进行监控调试,确定有效才加入代码列中。
希望对他人有效!