Die integrierten testund [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 testDienstprogramm .
Sie wurden nicht in das
testDienstprogramm übernommen, als der bedingte Befehl aus der [KornShell] -Shell entfernt wurde, da sie nicht in dastestDienstprogramm aufgenommen wurden, das in historischen Implementierungen desshDienstprogramms integriert ist.
Angenommen, ich möchte den Änderungszeitstempel zwischen Dateien in einem /bin/shShell-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?
-ntFunktion von nichttestin einer Weise, wie es seit ca. 1995. Sie sollten denfindbasd-Ausdruck auch dann verwenden,bashwenn Sie korrektes Verhalten mögen.