Je veux une ligne unique Bash qui crée atomiquement un fichier s'il n'existe pas. Cela signifie essentiellement "si le fichier n'existe pas, créez-le", mais assurez-vous que personne d'autre ne parvient à créer le fichier dans le petit espace entre faire le si et créer le fichier.
9
Réponses:
Voler une réponse à partir de divers commentaires et liens vers [SO]. Il semble qu'il existe une méthode compatible POSIX qui n'implique pas
mkdir
comme je l'ai mentionné dans ma réponse d'origine ci-dessousCette redirection vers le fichier renvoie 0 ou échoue et retourne non nul si le fichier existe déjà.
Réponse originale
Vous devrez utiliser
mkdir
- c'est atomique, soit le répertoire est créé et vous pouvez continuer, soit il ne l'est pas, vous prenez donc les mesures appropriées.Bien sûr,
mkdir
ne crée pas de fichier mais une fois que vous savez que vous avez un accès exclusif au répertoire, vous pouvez y créer le fichier que vous souhaitez.Quant à un seul paquebot - je m'en remets à vous. Personnellement, je l'écrirais sur quelques lignes, car ce sera plus facile à maintenir.
la source
S'agit-il d'un fichier ou d'un répertoire? Si fichier, vous pouvez utiliser une simple commande tactile - si le fichier existe, il suffit de modifier la dernière heure d'accès. Si le fichier n'existe pas, est créé.
la source
Essaye celui-là. Le
ln
fournit la fonctionnalité de test et de configuration.la source
Si vous ne vous souciez pas du nom de fichier, vous pouvez déléguer cette tâche à un utilitaire, par exemple mktemp
Invocation:
la source