Встроенные утилиты test
и [
утилиты имеют тесты -nt
(«новее чем») и -ot
(«старше чем») в большинстве оболочек, даже когда оболочка работает в «режиме POSIX» (также верно для внешних утилит с такими же именами на системы, к которым у меня есть доступ). Эти тесты предназначены для сравнения меток времени изменения двух файлов. Их документированная семантика немного различается в разных реализациях (в отношении того, что происходит, если тот или иной файл существует в не), но они не включены в спецификацию POSIX. за test
полезность .
Они не были перенесены в
test
утилиту, когда условная команда была удалена из оболочки [KornShell], потому что они не были включены вtest
утилиту, встроенную в исторические реализацииsh
утилиты.
Предполагая, что я хотел бы сравнить метку времени изменения между файлами в /bin/sh
сценарии оболочки, а затем принять меры в зависимости от того, является ли один файл более новым, чем другой, как в
if [ "$sigfile" -nt "$timestamp" ] ||
[ "$sigfile.tmp" -nt "$timestamp" ]
then
return
fi
... какую другую утилиту я мог бы использовать, кроме make
(что сделало бы остальную часть сценария громоздкой, если не сказать больше)? Или я должен просто предположить, что никто никогда не будет запускать сценарий для «исторической реализации sh
», или смириться с написанием для конкретной оболочки вроде bash
?
-nt
функцию,test
которая ожидается с ок. 1995. Вы должны использоватьfind
выражение basd, дажеbash
если вам нравится правильное поведение.