Le intégré test
et les [
utilitaires ont les tests -nt
("plus récent que") et -ot
("plus ancien que") dans la plupart des shells, même lorsque le shell s'exécute en "mode POSIX" (également vrai pour les utilitaires externes des mêmes noms sur le systèmes auxquels j'ai accès). Ces tests permettent de comparer les horodatages de modification sur deux fichiers. Leur sémantique documentée varie légèrement d'une implémentation à l'autre (en ce qui concerne ce qui se passe si l'un ou l'autre fichier n'existe pas), mais ils ne sont pas inclus dans la spécification POSIX. pour l' test
utilitaire .
Ils n'ont pas été reportés dans l'
test
utilitaire lorsque la commande conditionnelle a été supprimée du shell [KornShell] car ils n'ont pas été inclus dans l'test
utilitaire intégré aux implémentations historiques de l'sh
utilitaire.
En supposant que je voudrais comparer l'horodatage de modification entre les fichiers dans un /bin/sh
script shell et prendre des mesures selon que l' un fichier est plus récent que l'autre, comme dans
if [ "$sigfile" -nt "$timestamp" ] ||
[ "$sigfile.tmp" -nt "$timestamp" ]
then
return
fi
... quel autre utilitaire pourrais - je utiliser, à part make
( ce qui rendrait le reste du script trop compliqué pour le moins)? Ou devrais-je simplement supposer que personne ne va jamais exécuter le script sur une "implémentation historique de sh
", ou se résigner à écrire pour un shell spécifique comme bash
?
-nt
fonctionnalité detest
manière attendue depuis env. 1995. Vous devriez utiliser l'find
expression basd mêmebash
si vous aimez un comportement correct.