Ich schreibe ein Bash-Skript, das unter OSX und Ubuntu ausgeführt werden soll. Ich bin nicht sicher, ob dieses spezielle Problem auf eine Nichtübereinstimmung des Betriebssystems zurückzuführen ist. Wahrscheinlicher ist es ein Unterschied im Datumsbefehl für die beiden Shells, obwohl es sich um einen Schlag auf beide handelt? Wir werden sehen.
In der Bash-Shell von OSX tun wir Folgendes, um ein Datum von vor zwei Tagen zu drucken:
date -v-2d +"%Y"."%m"."%d"
Dieses -v
Flag ist jedoch in der Ubuntu-Bash-Shell ungültig. Stattdessen verwenden wir dort:
date --date="2 days ago" +"%Y"."%m"."%d"
Leider wird das --date
Flag in unserer OSX-Bash-Shell nicht erkannt.
Ich würde gerne einen Befehl mit Flags verwenden, die in beiden Fällen funktionieren. Würde jemand wissen, was ich versuchen könnte?
quelle
bash
. Es ist ein Problem mit verschiedenen Implementierungen vondate
.Antworten:
date
ist keinbash
eingebauter. Es ist ein Systemdienstprogramm, auf dem sich OSX und Linux unterscheiden. OSX verwendet BSD-Tools, während Linux GNU-Tools verwendet. Sie sind ähnlich, aber nicht gleich.Wie Sie festgestellt haben, wird unter OSX das
-d
Flag zurdate
Steuerung der Sommerzeit festgelegt, während unter Linux die Anzeigezeit festgelegt wird. Passt unter OSX-v
das Anzeigedatum an, unter Linux ist das-v
Flag jedoch eine ungültige Option.Zum größten Teil bemühen sich sowohl BSD als auch GNU um Kompatibilität mit dem POSIX-Standard. Wenn Sie jedoch den POSIX-Standard
date
überprüfen , werden Sie feststellen, dass dies in diesem Fall keine Hilfe ist: Es wird keine Syntax zum Anpassen des Datums unterstützt.Wenn Ihr Code auf beiden Plattformen funktionieren soll, versuchen Sie Folgendes:
Oder (erfordert Bash):
quelle
Mit ksh93 (was meiner Meinung nach viel besser ist als Bash für
printf
Skripte ) könnten Sie das eingebaute verwenden, z.quelle