【发布时间】:2019-06-02 10:45:52
【问题描述】:
我正在尝试从 GPG 加密文件中恢复 MySQL 数据库。
以下工作非常好:
my $status = system(
"gpg --pinentry-mode loopback --passphrase $passphrase --decrypt $my_encrypted_backup_file"
. " | "
. "mysql --host=myhost --user=myuser --password=mysecret mydatabase"
);
假设没有错误情况。
但是,如果在第一个过程中出现错误情况(例如不正确的 $passphrase),$status == 0 会错误地指示成功。我理解这是因为状态是从第二个进程 mysql 进程返回的。
有没有一种通用的方法,使用system(),从所有管道连接的进程中获取状态,或者在任何一个这样的进程失败时以某种方式检测错误?
顺便说一句,我已经单独测试了gpg(没有将其输出通过管道传输到 mysql),当输入了不正确的 $passphrase 时,它确实返回了错误代码。
解决方法可能是mysql 中的某个选项标志,当它从gpg 没有收到任何内容时返回错误。另一种解决方法是分解进程并使用某种 tmp 文件。但是,我想要一个更通用的解决方案。谢谢!
【问题讨论】:
标签: perl error-handling pipe ipc