Как игнорировать ошибку mv?
Я делаю Makefile, который перемещает выходной файл (foo.o
) в другой каталог (baz
).
Выходной файл перемещается по желанию в каталог. Однако поскольку make не будет перекомпилировать выходной файл, если я снова наберу make
, mv
получит сообщение об ошибке при попытке переместить несуществующий пустой файл в каталог baz
.
Итак, это то, что я определил в своем правиле make all
после всей компиляции:
-test -e "foo.o" || mv -f foo.o ../baz
К сожалению, я все еще получаю ошибки.
Ответы
Ответ 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"