如何在Linux Expect中使用正则表达式?解决Duplicity备份密码交互问题
解决Alpine系统中Expect处理Duplicity密码交互的问题
问题原因
- 你的Expect脚本试图一次性匹配Duplicity输出的整段前置信息+密码提示,但Duplicity是分多行逐步输出这些内容的,Expect会因等待完整匹配内容超时,无法触发密码发送。
- Alpine系统默认使用
busybox-expect(简化版Expect工具),不支持-re正则选项,只能使用glob模式的通配符匹配。
修正后的Expect脚本
完整可运行脚本如下,核心是通过通配符*忽略前置输出,只匹配关键的密码提示:
#!/usr/bin/env expect # 替换为你的实际GnuPG密码 set pass "your_gnupg_passphrase" # 启动Duplicity备份命令,替换为你的备份源和目标参数 spawn duplicity /path/to/source backup://target/location # 等待第一个密码提示,*匹配所有前置输出内容 expect "*GnuPG passphrase for decryption: " send "$pass\r" # 等待第二个密码确认提示 expect "*Retype passphrase for decryption to confirm: " send "$pass\r" # 等待备份命令执行完成 expect eof
使用说明
- 确保Alpine容器中已安装Expect:
apk add busybox-expect - 将脚本保存为
duplicity_backup.exp,赋予执行权限:chmod +x duplicity_backup.exp - 运行脚本:
./duplicity_backup.exp
内容的提问来源于stack exchange,提问作者jokey
相关产品推荐
相关产品推荐

