При автоматизации задачи целесообразно сначала проверить ее вручную. Было бы полезно, однако, если бы любые данные, поступающие в stderr, были сразу же распознаваемы как таковые и отличались от данных, поступающих в stdout, и иметь все выходные данные вместе, чтобы было очевидно, какова последовательность событий.
Последнее, что было бы неплохо, - при выходе из программы выводить код возврата.
Все эти вещи помогут в автоматизации. Да, я могу повторить код возврата после завершения программы, и да, я могу перенаправить stdout и stderr; что бы мне действительно понравилось, это какая-то оболочка, скрипт или простой в использовании редиректор, который показывает stdout черным цветом, показывает stderr с чередованием его красным и печатает код выхода в конце.
Есть ли такой зверь? [Если это имеет значение, я использую Bash 3.2 в Mac OS X].
Обновление : Извините, прошли месяцы с тех пор, как я смотрел на это. Я придумал простой тестовый скрипт:
#!/usr/bin/env python
import sys
print "this is stdout"
print >> sys.stderr, "this is stderr"
print "this is stdout again"
В моем тестировании (и, вероятно, из-за способа буферизации) rse и hilite отображают все из stdout, а затем все из stderr. Метод fifo правильно определяет порядок, но, кажется, окрашивает все, что следует за строкой stderr. ind пожаловался на мои строки stdin и stderr, а затем поместил вывод stderr последним.
Большинство из этих решений работоспособны, так как нет ничего необычного в том, что только последний вывод отправляется в stderr, но все же было бы неплохо иметь что-то, что работало бы немного лучше.
Ответы:
Вы также можете проверить stderred: https://github.com/sickill/stderred
источник
Я только что разработал сумасшедший метод с участием FIFO.
Если вы хотите, чтобы вывод stderr был отдельным, вы можете открыть две отдельные оболочки и запустить "
grep --color . foo
" в одной без&
, затем запустить команду в другой (все еще с2>foo
). Вы получите stderr вgrep
одном и stdout в главном.Это работает, потому что вывод stderr направляется через FIFO в
grep --color
, чей цвет по умолчанию красный (по крайней мере, для меня). Когда вы закончите, простоrm
FIFO (rm foo
).Предостережение : я действительно не уверен, как это будет обрабатывать порядок вывода, вам придется проверить его.
источник
Да, это возможно Посмотрите на раздел «Сделайте STDERR красный» на этом сайте для рабочего примера.
Основной код это
Краткое объяснение дается в самой функции. Что делает, так это перемещает STDOUT и STDERR, так что sed получает STDERR в 1, окрашивает его и затем меняет его обратно. Думайте о файловом потоке 3 как о временной переменной здесь.
Звонок довольно прост
Однако некоторые вызовы не будут работать так, как ожидалось; предостережения все представлены на связанной странице.
Кстати, я думаю, что это также возможно прийти с решением в виде
где rse раскрасит вывод.
Я также нашел этот HILITE проект , который , кажется , чтобы сделать это. Я не пробовал это, но это может быть то, что вы ищете.
Другие связанные проекты:
источник
Еще одна программа ind:
http: // www.habets.pp.se/synscan/programs.php?prog=ind (вам нужно собрать гиперссылку самостоятельно, у меня не хватает точек для более чем одного ответа). Там есть скриншот и даже скринкаст.
Он запускает подпроцесс в pty, что другие, вероятно, не делают. Это может иметь значение, когда порядок имеет значение (это часто имеет значение), так как stderr немедленно сбрасывается в терминалах, а stdout полностью буферизуется, когда он не tty.
Для полного объяснения, смотрите это: http://blog.habets.pp.se/2008/06/Buffering-in-pipes
Также ind работает с интерактивными программами и управляющими персонажами. Bash работает как обычно, когда начинается с "ind bash -i".
Это может работать, чтобы дать вам цвета при сохранении Ctrl-P et.al.
источник
Здесь много ответов для выделения вывода stderr. Я могу добавить только один довольно простой - в один ряд, который вы присоединяете к команде:
Но вы должны добавлять это после команды каждый раз.
Лично мне нравится возможность, упомянутая @nagul, функция rse добавлена в bashrc.
Но я хочу добавить решение для печати кода выхода. Вы можете добавить это значение в начало строки приглашения bash:
Где EC - код выхода команды.
Я установил его так, что когда код выхода равен 0, он не будет напечатан, но любое другое значение будет напечатано перед следующей подсказкой красным цветом.
Весь трюк сделан в ~ / .bashrc:
Строка подсказки по умолчанию определяется переменной PS1. Скопируйте все, что у вас есть, в переменную PROMPT, а затем создайте переменную PS1 с кодом выхода или без него.
Bash покажет информацию в переменной PS1 в командной строке.
источник
есть
annotate-output
утилита (devscripts
пакет Debian), если вы хотите сделать это без цветовисточник