Как сохранить 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
Другие вопросы по тегам