Ich möchte einen Bash-Einzeiler, der eine Datei atomar erstellt, wenn sie nicht vorhanden ist. Das bedeutet im Wesentlichen "Wenn eine Datei nicht vorhanden ist, erstellen Sie sie", aber stellen Sie sicher, dass es niemand anderem gelingt, die Datei auf kleinem Raum zwischen dem Ausführen des if und dem Erstellen der Datei zu erstellen.
9
Antworten:
Eine Antwort aus verschiedenen Kommentaren und Links zu [SO] stehlen . Es scheint, dass es eine POSIX-kompatible Methode gibt , die nicht die
mkdir
in meiner ursprünglichen Antwort unten erwähnte beinhaltetDiese Umleitung zur Datei gibt 0 zurück oder schlägt fehl und gibt einen Wert ungleich Null zurück, wenn die Datei bereits vorhanden ist.
Ursprüngliche Antwort
Sie müssen verwenden
mkdir
- das ist atomar, entweder wird das Verzeichnis erstellt und Sie können fortfahren oder es wird nicht erstellt, sodass Sie geeignete Maßnahmen ergreifen.Natürlich wird
mkdir
keine Datei erstellt, aber sobald Sie wissen, dass Sie exklusiven Zugriff auf das Verzeichnis haben, können Sie die gewünschte Datei erstellen.Was einen Einzeiler betrifft, überlasse ich das Ihnen. Persönlich würde ich es über ein paar Zeilen schreiben, da das wartbarer ist.
quelle
Ist es eine Datei oder ein Verzeichnis? Wenn es sich um eine Datei handelt, können Sie den einfachen Befehl touch verwenden. Wenn eine Datei vorhanden ist, wird lediglich die letzte Zugriffszeit geändert. Wenn die Datei nicht vorhanden ist, wird sie erstellt.
quelle
Probier diese. Das
ln
bietet die Test-and-Set-Funktionalität.quelle
Wenn Sie sich nicht für den Dateinamen interessieren, können Sie diese Aufgabe an ein Dienstprogramm delegieren, z. B. mktemp
Aufruf:
quelle