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 に答える