Дополнительный файловый дескриптор для отладки и конвейерного вывода (журналирование, метрики и т. д.)

Большая часть этого может быть скопирована на ваш .zprofile.

Ваши цвета могут быть установлены, как описано здесь , например:

%B{red}%F{blue}$%f%b 

создает синий знак доллара.

2
07.11.2020, 13:12
1 ответ

Fd 3 связан с /dev/nullв первой строке, поэтому стандартный вывод третьего Echo неизбежно перенаправляется на /dev/null.

Вместо этого проверьте, присвоен ли Fd 3, проверив существование /proc/self/fd/3. Если нет, то привяжите его к /dev/null. Если да, то оставьте его в покое.

[ -e /proc/self/fd/3 ] || exec 3> /dev/null
echo "This is stdout"
echo "This is stderr" >&2
echo "This is fd3" >&3
$./example.sh 3>&1
This is stdout
This is stderr
This is fd3
$./example.sh
This is stdout
This is stderr

Если третье эхо на самом деле представляет собой команду, которая записывает много вывода, более эффективной альтернативой является запуск команды только в том случае, если Fd 3 открыт.

echo "This is stdout"
echo "This is stderr" >&2
[ -e /proc/self/fd/3 ] && echo "This is fd3" >&3

Другая возможность заключается в том, чтобы всегда перенаправлять через Fd 3 в файл или FIFO и читать его, только если вы хотите, в вызывающем процессе, но это также будет означать ненужные штрафы за время, если этот вывод не используется.

1
18.03.2021, 22:51

Теги

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