«Мультиплексирование» stdout и stderr в /usr/bin/logger

«Мультиплексирование» stdout и stderr в /usr/bin/logger

Недавно я узнал о /usr/bin/logger и нашел его очень полезным.

Я заметил, что он содержит аргумент приоритета (-p) (facility.info, facility.alert и т. д.).

Так что если я хочу регистрировать только stdin, я делаю это следующим образом:

stuff | logger -p cron.info

Чтобы зарегистрировать только stderr, вот так:

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

Чтобы зарегистрировать как stdout, так и stderr:

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

Мне интересно, есть ли более лаконичный способ сделать это, чтобы избежать кучи копипасты.

Есть ли способ добиться чего-то подобного?

logging -F cron -s info -e err stuff

Большое спасибо

решение1

Это было бы довольно просто, если бы желаемый синтаксис был

logging cron info err stuff

В таком случае используйте следующую функцию:

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
}

Примечания:

  • Вместо этого вы можете создать автономный скрипт.
  • Синтаксический анализ -F, -s, -eвозможен, хотя и не такой простой, как вышеприведенныйЦЕЛОВАТЬ-й подход.

Связанный контент