3

У меня в Makefile есть команда, которая синхронизирует мои библиографии из внешнего источника. Если rsync завершается ошибкой, потому что целевой файл не существует, rsync завершается с ошибкой 23. Я могу скрыть ошибку, отправив вывод в /dev/null но это все равно вызывает выход моего Makefile. Как я могу получить следующий код Makefile для вывода "Hi" когда $(bib_dir) не существует?

sync_bibliography:
    rsync $(bib_dir) bib 2>/dev/null
    echo "HI"

2 ответа2

4

Вы можете использовать оператор ИЛИ || , Если предыдущая команда завершается с ошибкой и возвращает false, команда с правой стороны выполняется. Пример:

false || echo "The previous command failed"

или в вашем случае

rsync $(bib_dir) bib 2>/dev/null || echo "HI"
0

Поместите команду rsync в сценарий оболочки, а затем вызовите сценарий оболочки внутри файла Makefile. В конце сценария оболочки используйте что-то, что всегда будет возвращать true, например sleep 0 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .