Я пытаюсь осуществить восстановление базы данных MySQL из файла, зашифрованного GPG.
Отлично работает следующее:
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), и он возвращает код ошибки при вводе неверной фразы-пароля.
Обходным решением может быть некоторый флаг опции в mysql
, который возвращает ошибку, когда ничего не получает от gpg
. Другой обходной путь - разбить процессы и использовать какой-нибудь tmp-файл. Тем не менее, я хотел бы более обобщенное решение. Спасибо!