Как сохранить stderr и stdout в файл в Ubuntu
Когда я бегу
echo "invalid crt" | openssl x509 -noout -modulus | openssl md5 &>> error.log
это шоу ниже ошибки
unable to load certificate
139903857870496:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:703:Expecting: TRUSTED CERTIFICATE
и содержимое "(stdin)= d41d8cd98f00b204e9800998ecf8427e" в файле error.log
Я хочу сохранить stdin с ошибкой (как сохранить текст ошибки терминала в error.log тоже)
Как я могу это сделать?
2 ответа
Решение
Когда вы делаете
echo "invalid crt" | openssl x509 -noout -modulus | openssl md5 &>> error.log
единственный stderr второй команды openssl записывается в error.log. Использовать этот:
echo "invalid crt" | (openssl x509 -noout -modulus | openssl md5) &>> error.log
так что оба процесса openssl запускаются в подоболочке, и stderr подоболочки перенаправляется вместе со стандартным выводом в error.log.
Использование cmd &> file.log
:
$ blahblah &> /tmp/blah.log
$ echo $?
127
$ cat /tmp/blah.log
bash: blahblah: command not found
Чтобы добавить, используйте cmd >>file.log 2>&1
$ wrongcmd >>/tmp/blah.log 2>&1
$ cat /tmp/blah.log
bash: blahblah: command not found
bash: wrongcmd: command not found