Используя вывод предыдущих команд в ударе

В Mathematica возможно снова использовать вывод предыдущей команды при помощи %.

Действительно ли что-то подобно возможный для удара (или некоторая другая оболочка)?

Например, я выполняю делание, которое дает предупреждения, но я хочу найти все предупреждения. Так, я ввожу

make | grep "warning"

но я не могу видеть вывод делания затем.

Я хотел бы ввести что-то вроде этого вместо этого:

make
% | grep "warning"
9
задан Harsh 21 July 2010 в 09:30
поделиться

4 ответа

Поскольку объем вывода неопределен, bash не имеет смысла сохранять его для повторного отображения. Но есть альтернативное решение вашей проблемы:

Команда tee позволяет дублировать выходной поток в файл. Так что если вы готовы использовать файл для временного хранения, вы можете сделать что-то вроде этого:

make | tee output.txt
grep "warning" output.txt

Это решение позволяет избежать запуска make дважды, что может быть (а) дорогостоящим и (б) непоследовательным: второй make может выполнять меньше работы, чем первый, потому что некоторые цели уже были сделаны в первый раз.

Примечание: я не пробовал этого. Возможно, вам придется повозиться с соединением потоков ошибок и вывода, или что-то в этом роде.

13
ответ дан 4 December 2019 в 09:11
поделиться

Если вы используете tee для дублирования выходного потока в / dev / stderr, временный файл не нужен; Кроме того, после этого вы можете отфильтровать поток stdout с помощью sed для создания файла make_warning.log - и все это в одной строке каналов оболочки Unix.

make 2>&1 | tee /dev/stderr | \
   sed -E -n 's/(.*[Ww][Aa][Rr][Nn][Ii][Nn][Gg].*)/\1/p' > make_warning.log
2
ответ дан 4 December 2019 в 09:11
поделиться

Поменяйте местами потоки stdout и stderr для регистрации всего потока stderr :

make 3>&2 2>&1 1>&3 3>&- | tee /dev/stderr > stderr.log
3
ответ дан 4 December 2019 в 09:11
поделиться

Я не уверен если команда make отправляет предупреждения на stderr, но я подозреваю, что это так. попробуйте это

make 2&>1 |grep 'warning'

, он перенаправит stderr на stdout.

Следует также отметить, что вы не можете использовать grep для всего, что не попадает в стандартный вывод.

2
ответ дан 4 December 2019 в 09:11
поделиться