Я хочу одну строчку Bash, которая атомарно создает файл, если он не существует. По сути, это означает «если файл не существует, создайте его», но при этом убедитесь, что никому больше не удастся создать файл в небольшом пространстве между выполнением if и созданием файла.
9
Ответы:
Кража ответа из различных комментариев и ссылок на [SO]. Кажется, есть POSIX-совместимый метод , который не включает,
mkdir
как я уже упоминал в моем первоначальном ответе нижеЭто перенаправление в файл возвращает 0 или завершается ошибкой и возвращает ненулевое значение, если файл уже существует.
Оригинальный ответ
Вам придется использовать
mkdir
- это атомарно, либо каталог создается, и вы можете продолжить, либо он не создается, поэтому вы предпринимаете соответствующие действия.Конечно,
mkdir
не создает файл, но как только вы узнаете, что имеете эксклюзивный доступ к каталогу, вы можете создать в нем нужный вам файл.Что касается одного лайнера - я оставлю это на ваше усмотрение. Лично я бы написал это в несколько строк, так как это будет более понятным.
источник
Это файл или каталог? Если файл, вы можете использовать простую команду touch - если файл существует, он просто изменяет время последнего доступа. Если файл не существует, создается.
источник
Попробуй это.
ln
Обеспечивает функциональные возможности тест-и-набор.источник
Если вас не волнует имя файла, вы можете делегировать эту задачу утилите, например, mktemp
Призвание:
источник