1

我正在尝试将文件解密为 bash 变量,然后将其通过管道传输到 zcat,然后通过管道传输该 mysql。将输出发送到文件不是一个选项,因为它是一个指定的要求。

所以我所拥有的是:

temp=$(gpg --batch --quiet --yes --passphrase=XXXXXX --decrypt file.sql.gz.gpg)
{ zcat preprocess.sql.gz; echo $temp | zcat; } | mysql -u$DB_USER -p$DB_PWD --host=$DB_HOST $DB_ID

响应是正确解压缩的预处理文件,后跟:

zcat: stdin is encrypted -- not supported

但是,当我这样做时:

gpg --batch --quiet --yes --passphrase=XXXXXX --decrypt file.sql.gz.gpg > tempfile.sql.gz
zcat preprocess.sql.gz tempfile.sql.gz | mysql -u$DB_USER -p$DB_PWD --host=$DB_HOST $DB_ID

它按预期工作。但是,正如我所说,我们不希望任何解密文件在服务器上停留任何时间(某些 mysl 导入需要数小时),因此写入文件然后删除它不是一个开始。

所以问题是为什么 gpg 在 $temp 变量中存储与文件不同的东西?我能做些什么

4

1 回答 1

1

但是,正如我所说,我们不希望任何解密文件在服务器上停留任何时间......

而不是说:

temp=$(gpg --batch --quiet --yes --passphrase=XXXXXX --decrypt file.sql.gz.gpg)
{ zcat preprocess.sql.gz; echo $temp | zcat; } | mysql -u$DB_USER -p$DB_PWD --host=$DB_HOST $DB_ID

说:

{ zcat preprocess.sql.gz; gpg --batch --quiet --yes --passphrase=XXXXXX --decrypt file.sql.gz.gpg | zcat; } | mysql -u$DB_USER -p$DB_PWD --host=$DB_HOST $DB_ID

你甚至可以避免保存解密数据的变量!

于 2013-09-20T11:01:23.860 回答