Как проигнорировать ошибку mv? - PullRequest
30 голосов
/ 29 июня 2010

Я делаю Makefile, который перемещает выходной файл (foo.o) в другой каталог (baz).

Выходной файл перемещается по желанию в каталог. Однако, поскольку make не перекомпилирует выходной файл, если я снова наберу make, mv получит ошибку при попытке переместить несуществующий пустой файл в каталог baz.

Так вот что я определил в своем правиле make all после всей компиляции:

-test -e "foo.o" || mv -f foo.o ../baz

К сожалению, я все еще получаю ошибки.

Ответы [ 5 ]

103 голосов
/ 10 января 2013

Ошибки в рецептах (из TFM)

Чтобы игнорировать ошибки в строке рецепта, напишите - в начале текст строки (после начальной вкладки).

Таким образом, цель будет выглядеть примерно так:

moveit:
    -mv foo.o ../baz
31 голосов
/ 08 января 2013

Я заметил, что на самом деле никто еще не ответил на исходный вопрос, в частности, как игнорировать ошибки (в настоящее время все ответы касаются только вызова команды, если она не вызовет ошибки).

Фактическиигнорируя ошибки, вы можете просто сделать:

mv -f foo.o ../baz 2>/dev/null; true

Это перенаправит вывод stderr на null и последует команде с true (которая всегда возвращает 0, заставляя make веритькоманда выполнена независимо от того, что на самом деле произошло), что позволяет продолжить выполнение программы.

9 голосов
/ 29 июня 2010
+@[ -d $(dir $@) ] || mkdir -p $(dir $@)

- это то, что я использую для тихого создания папки, если она не существует. Для вашей проблемы что-то вроде этого должно работать

-@[ -e "foo.o" ] && mv -f foo.o ../baz
1 голос
/ 29 июня 2010
   -test -e "foo.o" || if [ -f foo.o ]; then mv -f foo.o ../baz; fi;

Это должно работать

0 голосов
/ 29 июня 2010

Должно работать что-то вроде

test -e "foo.o" && mv -f foo.o ../baz

: оператор должен быть && вместо ||.

Вы можете поэкспериментировать с этим, попробовав следующие команды:

test -e testfile && echo "going to move the file"
test -e testfile || echo "going to move the file"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...