Сделать: как продолжить выполнение команды?
Команда $ make all
дает ошибки, такие как rm: cannot remove '.lambda': No such file or directory
, поэтому она останавливается. Я хочу, чтобы он игнорировал ошибки rm-not-found-errors. Как я могу принудительно сделать?
Makefile
all:
make clean
make .lambda
make .lambda_t
make .activity
make .activity_t_lambda
clean:
rm .lambda .lambda_t .activity .activity_t_lambda
.lambda:
awk '{printf "%.4f \n", log(2)/log(2.71828183)/$$1}' t_year > .lambda
.lambda_t:
paste .lambda t_year > .lambda_t
.activity:
awk '{printf "%.4f \n", $$1*2.71828183^(-$$1*$$2)}' .lambda_t > .activity
.activity_t_lambda:
paste .activity t_year .lambda | sed -e '[email protected]\[email protected]\t\&\[email protected]' -e '[email protected][email protected]\t\\\\@g' | tee > .activity_t_lambda > ../RESULTS/currentActivity.tex
Ответы
Ответ 1
Попробуйте флаг -i
(или --ignore-errors
). Документация, кажется, предлагает более надежный способ достичь этого, кстати:
Чтобы игнорировать ошибки в командной строке, напишите -
в начале текста строки (после начальной вкладки). -
отбрасывается до того, как команда будет передана оболочке для выполнения.
Например,
clean:
-rm -f *.o
Это приводит к тому, что rm
продолжается, даже если он не может удалить файл.
Все примеры с rm
, но применимы к любой другой команде, вам нужно игнорировать ошибки из (т.е. mkdir
).
Ответ 2
Изменить чистоту на
rm -f .lambda .lambda_t .activity .activity_t_lambda
т.е. не запрашивать удаление; не жалуйтесь, если файл не существует.
Ответ 3
make -k
(или --keep-going
на gnumake) будет делать то, о чем вы просите, я думаю.
Вам действительно нужно найти строку del или rm, которая терпит неудачу, и добавить к ней -f
, чтобы эта ошибка не происходила с другими.
Ответ 4
Чтобы заставить make фактически игнорировать ошибки в одной строке, вы можете просто суффиктировать его с помощью ; true
, установив возвращаемое значение равным 0. Например:
rm .lambda .lambda_t .activity .activity_t_lambda 2>/dev/null; true
Это приведет к перенаправлению вывода stderr в значение null и последует команде с true (которая всегда возвращает 0, заставляя make полагать, что команда выполнена успешно, независимо от того, что на самом деле произошло), что позволяет продолжить выполнение программы.
Ответ 5
Измените clean
, поэтому rm
не будет жаловаться:
clean:
rm -f .lambda .lambda_t .activity .activity_t_lambda
Ответ 6
Вернитесь успешно, заблокировав rm
returncode за трубой с помощью команды true
, которая всегда возвращает 0
(успех)
rm file | true
Ответ 7
Поместите опцию -f
в команду rm
.
rm -f .lambda .lambda_t .activity .activity_t_lambda