Die integrierten test
und [
Dienstprogramme haben in den meisten Shells die Tests -nt
("neuer als") und -ot
("älter als"), auch wenn die Shell im "POSIX-Modus" ausgeführt wird (gilt auch für die gleichnamigen externen Dienstprogramme auf dem Systeme, auf die ich Zugriff habe). Diese Tests dienen zum Vergleichen von Änderungszeitstempeln für zwei Dateien. Ihre dokumentierte Semantik variiert geringfügig zwischen den Implementierungen (in Bezug darauf, was passiert, wenn die eine oder andere Datei nicht vorhanden ist), sie sind jedoch nicht in der POSIX-Spezifikation enthalten. für das test
Dienstprogramm .
Sie wurden nicht in das
test
Dienstprogramm übernommen, als der bedingte Befehl aus der [KornShell] -Shell entfernt wurde, da sie nicht in dastest
Dienstprogramm aufgenommen wurden, das in historischen Implementierungen dessh
Dienstprogramms integriert ist.
Angenommen, ich möchte den Änderungszeitstempel zwischen Dateien in einem /bin/sh
Shell-Skript vergleichen und dann Maßnahmen ergreifen, je nachdem, ob eine Datei neuer als die andere ist, wie in
if [ "$sigfile" -nt "$timestamp" ] ||
[ "$sigfile.tmp" -nt "$timestamp" ]
then
return
fi
... welches andere Dienstprogramm könnte ich verwenden, abgesehen davon make
(was den Rest des Skripts gelinde gesagt unhandlich machen würde)? Oder sollte ich einfach davon ausgehen, dass niemand das Skript jemals auf einer "historischen Implementierung von sh
" ausführen oder sich damit abfinden wird, für eine bestimmte Shell wie zu schreiben bash
?
-nt
Funktion von nichttest
in einer Weise, wie es seit ca. 1995. Sie sollten denfind
basd-Ausdruck auch dann verwenden,bash
wenn Sie korrektes Verhalten mögen.