Eu quero um one-liner Bash que crie um arquivo atomicamente se ele não existir. Isso significa essencialmente "se o arquivo não existir, crie-o", mas garanta que ninguém mais consiga criar o arquivo no pequeno espaço entre fazer o if e criar o arquivo.
9
Respostas:
Roubando uma resposta de vários comentários e links para [SO]. Parece que existe um método compatível com POSIX que não envolve,
mkdir
como mencionei na minha resposta original abaixoEsse redirecionamento para o arquivo retorna 0 ou falha e retorna diferente de zero se o arquivo já existir.
Resposta original
Você precisará usar
mkdir
- isso é atômico, ou o diretório é criado e você pode continuar ou não, para que você tome as medidas apropriadas.Obviamente,
mkdir
não cria um arquivo, mas quando você souber que tem acesso exclusivo ao diretório, poderá criar o arquivo que deseja nele.Quanto a uma fila - vou deixar isso para você. Pessoalmente, eu o escreveria algumas linhas, pois isso será mais sustentável.
fonte
É arquivo ou diretório? Se arquivo, você pode usar o comando simples touch - se o arquivo existir, apenas modifique o horário do último acesso. Se o arquivo não existir, será criado.
fonte
Tente este. O
ln
fornece a funcionalidade de teste e configuração.fonte
Se você não se importa com o nome do arquivo, pode delegar esta tarefa a um utilitário, por exemplo mktemp
Invocação:
fonte