Я хотел бы иметь возможность помещать сообщения журнала в середину функций 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
содержит «кошка-мышка»
?
Вы можете перенаправить вывод в файл ошибок 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
Вы можете перенаправить вывод журнала в стандартный поток ошибок:
log()
{
echo 1>&2 "Log message: $1"
}