Я использую Makefile (с GNU make, работающим под Linux), чтобы автоматизировать мою грубую работу при рефакторинге скрипта Python.
Сценарий создает выходной файл, и я хочу убедиться, что выходной файл остается неизменным перед лицом моих рефакторингов.
Однако я не нашел способа получить код состояния команды, чтобы повлиять на последующую командную оболочку if.
Следующее правило иллюстрирует проблему:
check-cond-codes:
diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$$!=
diff -q poalim report2008_4.csv; echo differences: =$$!=
Первый 'diff' сравнивает два одинаковых файла, а второй сравнивает два разных файла.
Выход:
diff report2008_4.csv report2008_4.csv-save-for-regression-testing; echo no differences: =$!=
no differences: ==
diff -q poalim report2008_4.csv; echo differences: =$!=
Files poalim and report2008_4.csv differ
differences: ==
Так очевидно, что «$$!» неправильная переменная для захвата кода состояния diff.
Даже используя
ОБОЛОЧКА: = / bin / bash
в начале Makefile не решил проблему.
Переменная, возвращающая нужное мне значение, будет (если она вообще существует) использоваться в команде if в реальном правиле.
Альтернатива создания небольшого специального сценария оболочки вместо написания всех встроенных команд в Makefile нежелательна, но я буду использовать его в качестве последнего средства.
Связанный: