Bash Вывод не перенаправляется в файл - PullRequest
0 голосов
/ 21 апреля 2020

Я пишу скрипт, чтобы проверить, выдан ли данный сертификат моим CA. Скрипт принимает сертификат, который я хочу проверить, в качестве входных данных. Ниже приведен фрагмент общего кода, который я использую,

output=$(openssl verify -CAfile /home/Admin/CA/sign_CA.pem $1 2> error.txt)

if [[ $output == *"error"* ]];then
        echo "Certificate Verification Failed"
        exit 1
fi

Как видите, я перенаправляю ошибку в файл error.txt . Также выходные данные должны быть сохранены в переменной output .

Когда я передаю несуществующий файл, я получаю сообщение об ошибке, напечатанное на моем экране. Также регулярное выражение не работает. Я не получаю сообщение об ошибке Ошибка проверки сертификата .

Вывод из моей оболочки:

Admin@Bionic-WorkBook: ~ / CA $. / Verify. sh /home/Admin/ad21.pem

Невозможно открыть ../ad21.pem для чтения. Нет такого файла или каталога
139691424915904: ошибка: 02001002: системная библиотека: fopen: Нет такого файла или каталога: ../ crypto / bio / bss_file. c: 72: fopen ('../ ad21.pem', 'r')
139691424915904: ошибка: 2006D080: подпрограммы BIO: BIO_new_file: нет такого файла: ../ crypto / bio / bss_file. c : 79: невозможно загрузить сертификат

Содержимое error.txt:

Admin@Bionic-WorkBook: ~ / CA $ cat output.txt

Не удается открыть ../ad21.pem для чтения, Нет такого файла или каталога
140041413374400: ошибка: 02001002: системная библиотека: fopen: Нет такого файла или каталога: ../ crypto / bio / bss_file. c: 72: fopen ('../ ad21.pem', 'r')
140041413374400: ошибка: 2006D080: подпрограммы BIO: BIO_new_file: нет такого файла: ../ crypto / bio / bss_file. c: 79: невозможно загрузить сертификат

Мои вопросы:
i) Как на экране появилась ошибка? Как видите, ошибка перенаправляется в файл, а вывод - в переменную. Тогда, как ошибка выводилась на экран?
i) Почему не удалось выполнить регулярное выражение? Поскольку вывод имеет то же сообщение об ошибке, почему регулярное выражение не удалось?

1 Ответ

0 голосов
/ 21 апреля 2020

Вы найдете ответ на свои сомнения по этой ссылке: - https://superuser.com/a/935427

Вот TL; DR ответ: -

$(command) будет хранить для вас вывод command в переменной output.

Пример.

cat file.txt //all command's success failure can be check using $? variable.
echo $?

Если вы хотите сохранить ошибку в переменной output, просто не делайте перенаправление или используйте что-то подобное (проверьте выделенную часть в блоке кода)


output=$(openssl verify -CAfile /home/Admin/CA/sign_CA.pem $1 2> error.txt <b>; cat error.txt</b>)
if [[ $output == *"error"* ]];then
        echo "Certificate Verification Failed"
        exit 1
fi
...