Вы подняли интересный вопрос и сделали утверждение, которое следует сначала проверить.
Я проверил поведение:
$shell -c '[ Makefile -nt SCCS/s.Makefile ] && echo newer'
с различными снарядами. Вот результаты:
bash Не работает -ничего не печатает.
чушьработы
тире Не работает -ничего не печатает.
ksh88 Не работает -ничего не печатает.
кш93работает
mksh Не работает -ничего не печатает.
шикарный печатает :шикарный :[:-nt :неожиданный оператор/операнд
яшработает
zshработает в более новых версиях , более старые версии ничего не печатают
Итак, четыре из девяти оболочек поддерживают функцию-nt и правильно ее реализуют. Правильно в этом случае означает, что:может сравнивать метки времени на последних платформах, которые поддерживают суб-зернистость второй метки времени . Обратите внимание, что файлы, которые я выбрал, обычно отличаются только несколькими микросекундами в своих метках времени.
Так как легче найти рабочую find
реализацию, рекомендую заменить
if [ "$file1" -nt "$file2" ] ; then
echo newer
fi
выражением на основе find
.
if [ "$( find "$file1" -newer "$file2" )" ]; then
echo newer
fi
работает, по крайней мере, до тех пор, пока $file1
не содержит только новые строки.
if [ "$( find -L "$file1" -newer "$file2" -exec echo newer \; )" ]; then
echo newer
fi
немного медленнее, но работает корректно.
Кстати,:Что касается make , я не могу говорить обо всех реализациях make, но SunPro Make
поддерживает сравнение времени с точностью до наносекунд, начиная с прибл. 20 лет, а smake
и gmake
добавили эту функцию совсем недавно.
Итак, наконец, я решил эту проблему. Я обнаружил, что при обновлении моей машины kali произошло неудачное завершение работы, что привело к отсутствию некоторых файлов в образе linux -5.5.0 и вызвало проблему с конфигурацией. Я просто удалил всю информацию о Linux -image -5.5.0 из Dpkg и попробовал apt-get update
и apt autoremove
, и это решило эту проблему.