flocké uma das maneiras de operações interligadas. O utilitário faz parte do conjunto de ferramentas util-linux e está disponível apenas para Linux. Outros utilitários, disponíveis em uma ampla variedade de plataformas, baseiam-se no setlockutilitário de Daniel J. Bernstein em seu pacote daemontools:
setlock de daemontools
setlock do daemontools-encore de Bruce Guenter
s6-setlock do s6 de Laurent Bercot
chpst do runit de Gerrit Pape
runlock do criminoso de Wayne Marshall
setlock do meu conjunto de ferramentas nosh
Essas ferramentas operam com um paradigma um pouco diferente do usado na resposta de M. Kurenkov (que flocktambém pode ser empregada, mas não nessa resposta). Um chama o setlockprograma para encadear a carga no comando que deve ser intertravado. setlockele próprio abre e bloqueia o arquivo de bloqueio e deixa um descritor de arquivo aberto em seu processo. O bloqueio persiste enquanto esse processo persistir (a menos que o comando subsequente encadeado para liberar explicitamente o bloqueio localizando e fechando o descritor de arquivo aberto).
Para o caso da pergunta, é necessário bloquear o comando que produz a linha de saída, sabendo que isso chama um externo echo no lugar de um echocomando interno do shell :
setlock mylockfile echo "$ RESULT" >> ./$TEMP_DIR/$OUT_FILE
Nesse caso, não é necessário bloquear a abertura do arquivo de saída no modo de acréscimo. Se fosse, seria necessário abrir esse arquivo dentro do bloqueio, o que exige o uso de programas como fdredir/ redirfd:
setlock mylockfile fdredir --append 1 "./$TEMP_DIR/$OUT_FILE" echo "$ RESULT"
qual deles pode se transformar em uma função shell se quiser:
outfile () {setlock mylockfile fdredir --append 1 "./$TEMP_DIR/$OUT_FILE" "$ @"; }
[…]
Eco de arquivo "$ RESULT"ou manter a sintaxe do shell e interpretá-lo por um segundo shell em execução sob o intertravamento, exigindo uma citação não trivial se as variáveis do shell de alguém não forem exportadas como variáveis de ambiente:
setlock mylockfile sh -c 'echo' "$ RESULT" '>> "./'$TEMP_DIR'/'$OUT_FILE'" '
É claro que isso generaliza para outras coisas além de gravar nos arquivos de saída:
setlock mylockfile sh -c '... intertravado; coisa …'
`pwd`; você pode apenas usar um ponto (.). Além disso, você deve citar esse nome de arquivo inteiro, pois inclui variáveis .