"Multiplexación" stdout y stderr en /usr/bin/logger

"Multiplexación" stdout y stderr en /usr/bin/logger

Recientemente descubrí /usr/bin/logger y lo encuentro muy bueno.

Noté que contiene un argumento de prioridad (-p) (facility.info, facility.alert, etc.).

Entonces, si quiero iniciar sesión solo en stdin, lo hago de esa manera:

stuff | logger -p cron.info

Para iniciar sesión simplemente stderr, de esa manera:

stuff 2>&1 > /dev/null | logger -p cron.err

Para registrar tanto stdout como stderr:

stuff 2> >(logger -p cron.err) | logger -p cron.info

Me pregunto si hay una forma más concisa de hacer esto para evitar copiar y pegar.

¿Hay alguna manera de lograr ese tipo de cosas?

logging -F cron -s info -e err stuff

Muchas gracias

Respuesta1

Esto sería bastante fácil si la sintaxis deseada fuera

logging cron info err stuff

En tal caso utilice la siguiente función:

logging() {
    if [ "$#" -lt 4 ]; then
        echo "Too few arguments." >&2
        return 1
    else
        local prefix postfix1 postfix2
        prefix="$1"
        postfix1="$2"
        postfix2="$3"
        shift 3
        "$@" 2> >(logger -p "$prefix.$postfix2") | logger -p "$prefix.$postfix1"
    fi
}

Notas:

  • En su lugar, puede crear un script independiente.
  • Analizar -F, es posible, aunque no tan sencillo como el anterior -s.-eBESO-y enfoque.

información relacionada