Question

In my bash script I use grep in different logs like this:

LOGS1=$(grep -E -i 'err|warn' /opt/backup/exports.log /opt/backup/imports.log && grep "tar:" /opt/backup/h2_backups.log /opt/backup/st_backups.log)

if [ -n "$LOGS1" ] ]; then
        COLOUR="yellow"
        MESSAGE="Logs contain warnings. Backups may be incomplete. Invetigate these warnings:\n$LOGS"

Instead of checking if each log exsist (there are many more logs than this) I want check stderr while the script runs to see if I get any output. If one of the logs does not exists it will produce an error like this: grep: /opt/backup/st_backups.log: No such file or directory

I've tried to read sterr with commands like command 2> >(grep "file" >&2 but that does not seem to work.

I know I can pipe the output to a file, but I rather just handle the stderr when there is any output instead of reading the file. OR is there any reason why pipe to file is better?

Était-ce utile?

La solution

Send the standard error (file descriptor 2) to standard output(file descriptor 1) and assign it to var Q:

$ Q=$(grep text file 2>&1)
$ echo $Q
grep: file: No such file or directory

Autres conseils

This is default behaviour, stderr is normally set to your terminal (and unbuffered) so you see errors as you pipe stdout somewhere. If you want to merge stderr with stdout then this is the syntax,

command >file 2>&1
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top