Регистрация функций в bash and stdout

Я хотел бы иметь возможность помещать сообщения журнала в середину функций bash, не влияя на вывод этих функций. Например, рассмотрим следующие функции log () и get_animals () :

# print a log a message
log ()
{
    echo "Log message: $1"
}

get_animals()
{
    log "Fetching animals"
    echo "cat dog mouse"
}

values=`get_animals`
echo $values

После чего $ values ​​ содержит строку «Сообщение журнала: извлечение животных cat dog mouse» .

Как мне изменить этот сценарий, чтобы «Сообщение журнала : «Выбор животных» выводится на терминал, а $ values ​​ содержит «кошка-мышка» ?

13
задан Adam 19 August 2010 в 18:26
поделиться

2 ответа

Вы можете перенаправить вывод в файл ошибок sdterr на дескрипторе файла 2, используя> & 2

пример:

# print a log a message
log ()
{
echo "Log message: $1" >&2
}

get_animals()
{
log "Fetching animals"
echo "cat dog mouse"
}

values=`get_animals`
echo $values

`` выводить только на стандартный вывод, а не на stderr. Консоль, с другой стороны, отображает и то, и другое.

Если вы действительно хотите, чтобы сообщение журнала выводилось на стандартный вывод, вы можете перенаправить ошибку обратно на стандартный вывод после присвоения переменной:

# print a log a message
log ()
{
    echo "Log message: $1" >&2
}

get_animals()
{
    log "Fetching animals"
    echo "cat dog mouse"
}

values=`get_animals` 2>&1
echo $values
12
ответ дан 1 December 2019 в 20:42
поделиться

Вы можете перенаправить вывод журнала в стандартный поток ошибок:

log()
{
    echo 1>&2 "Log message: $1"
}
1
ответ дан 1 December 2019 в 20:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: