2013-03-15 4 views
7

У меня есть команда rm *.o в Makefile, чтобы удалить все объектные файлы, сгенерированные во время компиляции. Однако некоторые данные об ошибках будут выводиться, если файл .o не существует. Итак, как я могу подавить вывод информации об ошибке?Shell - Подавить вывод одной команды

ответ

11

В контексте make, что более важно, чем выход, вы не хотите, чтобы make обрабатывал результат rm как отказ. Есть два способа борьбы с ним:

clean: 
    -rm *.o 2> /dev/null 
    rm -f *.o 2> /dev/null 

Первый способ заключается в префикс команды со знаком минус, который говорит make игнорировать код возврата. Это предпочтительный, make -специальный способ. Во-вторых, используется флаг -f, который относится только к rm.

Кроме того, вы можете подавить выход с помощью 2> /dev/null или нет.

2

rm -f *.o

или

rm *.o >& /dev/null

+0

Вы должны быть осторожны с обозначениями '> &'. Он отлично работает в 'bash', но не работает в' dash'. Так как 'dash' отлично действует с учетом тегов в вопросе, нецелесообразно использовать'> & '. –

6

В редких случаях, это может также быть необходимым, чтобы перенаправить вывод в /dev/null. Вероятно, вы захотите сделать rm *.o > /dev/null 2>&1. Часть > /dev/null отправляет stdout в /dev/null, а 2>&1 говорит, что отправляет stderr туда, куда идет stdout.

+0

Я не считаю, что 'rm' использует стандартный вывод вообще. – chepner

+0

Зависит от того, был ли rm псевдонимом rm -v. Большинство систем этого не делают, это, вероятно, привычка, которую я взял с давних пор, когда какой-то дистрибутив подумал, что это хорошая идея. – Steve

+0

Я вижу, что в справочной странице BSD упоминаются исторические реализации, которые будут запрашивать стандартный вывод. – chepner

Смежные вопросы