В Mathematica возможно снова использовать вывод предыдущей команды при помощи %.
Действительно ли что-то подобно возможный для удара (или некоторая другая оболочка)?
Например, я выполняю делание, которое дает предупреждения, но я хочу найти все предупреждения. Так, я ввожу
make | grep "warning"
но я не могу видеть вывод делания затем.
Я хотел бы ввести что-то вроде этого вместо этого:
make
% | grep "warning"
Поскольку объем вывода неопределен, bash
не имеет смысла сохранять его для повторного отображения. Но есть альтернативное решение вашей проблемы:
Команда tee
позволяет дублировать выходной поток в файл. Так что если вы готовы использовать файл для временного хранения, вы можете сделать что-то вроде этого:
make | tee output.txt
grep "warning" output.txt
Это решение позволяет избежать запуска make
дважды, что может быть (а) дорогостоящим и (б) непоследовательным: второй make может выполнять меньше работы, чем первый, потому что некоторые цели уже были сделаны в первый раз.
Примечание: я не пробовал этого. Возможно, вам придется повозиться с соединением потоков ошибок и вывода, или что-то в этом роде.
Если вы используете 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
Поменяйте местами потоки stdout
и stderr
для регистрации всего потока stderr
:
make 3>&2 2>&1 1>&3 3>&- | tee /dev/stderr > stderr.log
Я не уверен если команда make
отправляет предупреждения на stderr, но я подозреваю, что это так. попробуйте это
make 2&>1 |grep 'warning'
, он перенаправит stderr на stdout.
Следует также отметить, что вы не можете использовать grep для всего, что не попадает в стандартный вывод.