"Multiplexação" stdout e stderr em /usr/bin/logger

"Multiplexação" stdout e stderr em /usr/bin/logger

Recentemente descobri sobre /usr/bin/logger e achei muito bom.

Percebi que ele contém um argumento de prioridade (-p) (facility.info, facilities.alert, etc.).

Então, se eu quiser logar apenas stdin, faço assim:

stuff | logger -p cron.info

Para logar apenas stderr, desta forma:

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

Para registrar stdout e stderr :

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

Gostaria de saber se existe uma maneira mais concisa de fazer isso, para evitar copiar e colar.

Existe uma maneira de conseguir esse tipo de coisa?

logging -F cron -s info -e err stuff

Muito obrigado

Responder1

Isso seria muito fácil se a sintaxe desejada fosse

logging cron info err stuff

Nesse caso use a seguinte função:

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:

  • Você pode criar um script independente.
  • A análise -F, -s, -eé possível, embora não tão simples quanto acimaBEIJO-y abordagem.

informação relacionada