«grep THIS foo.txt> THIS.txt» выдает ошибку в Makefile, а не в bash, когда вывод grep пуст - PullRequest
7 голосов
/ 21 января 2011

Makefile выглядит следующим образом:

THIS.txt : foo.txt  
        grep THIS foo.txt > $@

Когда вывод grep пуст (ЭТОГО в foo.txt нет), make выдает сообщение об ошибке, bash не:

$ make  
make:*** [THIS.txt] Error 1

$ grep THIS foo.txt > THIS.txt  

$ grep THIS foo.txt 2>&1  

Как так?Как мне изменить мой make-файл, чтобы избежать сообщения об ошибке, когда вывод grep пуст?

1 Ответ

13 голосов
/ 21 января 2011

grep не выдает ошибку в bash, но делает возвращает ненулевой код выхода:

> grep THIS foo.txt 2>&1
> echo $?
1

Если вы хотите избавиться от этого ненулевого кода выхода, чтобы make не помечал его как ошибку, вы можете сделать это:

THIS.txt : foo.txt
     grep THIS foo.txt > $@ || true

Бит || true говорит, что «если есть ненулевой код выхода, вместо этого верните код выхода true (который всегда равен 0 в bash).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...