Chcę jedno-liniowy Bash, który atomowo tworzy plik, jeśli nie istnieje. Oznacza to w zasadzie „jeśli plik nie istnieje, utwórz go”, ale upewnienie się, że nikomu innemu nie uda się utworzyć pliku na małej przestrzeni między wykonaniem if a utworzeniem pliku.
9
Odpowiedzi:
Kradzież odpowiedzi z różnych komentarzy i linków do [SO]. Wydaje się, że istnieje metoda zgodna z POSIX , która nie wymaga,
mkdir
jak wspomniałem w mojej oryginalnej odpowiedzi poniżejTo przekierowanie do pliku zwraca 0 lub kończy się niepowodzeniem i zwraca wartość niezerową, jeśli plik już istnieje.
Oryginalna odpowiedź
Musisz użyć
mkdir
- to atomowy, albo katalog zostanie utworzony i możesz kontynuować, albo nie zostanie utworzony, więc podejmij odpowiednie działania.Oczywiście
mkdir
nie tworzy pliku, ale gdy wiesz, że masz wyłączny dostęp do katalogu, możesz utworzyć plik, który chcesz w nim znaleźć.Co do jednej wkładki - pozostawię to tobie. Osobiście napisałbym to w kilku wierszach, ponieważ będzie to łatwiejsze w utrzymaniu.
źródło
Czy to plik lub katalog? Jeśli plik, możesz użyć prostego polecenia dotykowego - jeśli plik istnieje, wystarczy zmodyfikować czas ostatniego dostępu. Jeśli plik nie istnieje, zostaje utworzony.
źródło
Spróbuj tego.
ln
Dostarcza test-i-Set funkcjonalności.źródło
Jeśli nie zależy Ci na nazwie pliku, możesz przekazać to zadanie narzędziu, na przykład mktemp
Wezwanie:
źródło