Подтвердить что ты не робот

Как игнорировать ошибку mv?

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

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

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

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

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

4b9b3361

Ответ 1

[email protected][ -d $(dir [email protected]) ] || mkdir -p $(dir [email protected])

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

[email protected][ -e "foo.o" ] && mv -f foo.o ../baz

Ответ 2

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

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

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

moveit:
    -mv foo.o ../baz

Ответ 3

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

Чтобы фактически игнорировать ошибки, вы можете просто:

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

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

Ответ 4

   -test -e "foo.o" || if [ -f foo.o ]; then mv -f foo.o ../baz; fi;

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

Ответ 5

Что-то вроде

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"