Shellcheck reclama que eu não deveria ler e escrever o mesmo arquivo no mesmo pipeline

3

ShellCheck mostra o seguinte erro para esta linha de código:

printf '%d' $(($(< "$1") + 1)) > "$1"

Certifique-se de não ler e escrever o mesmo arquivo no mesmo canal

Isso é realmente um problema? Poderia ler e gravar o mesmo arquivo resultar em uma condição de corrida?

    
por helpermethod 24.09.2015 / 16:02

2 respostas

1

Sim, ler e escrever do mesmo arquivo em paralelo pode resultar em uma condição de corrida. Um redirecionamento de entrada e de saída para o mesmo arquivo no mesmo comando truncaria o arquivo antes de começar a lê-lo.

Mas não, isso não é o que está acontecendo aqui. É um falso positivo no Shellcheck. Aqui o redirecionamento está dentro de uma expressão aritmética. Todas as substituições (aritmética, variável, comando, bem como divisão e globbing) são executadas antes que os redirecionamentos sejam executados. Então, no momento em que > "$1" abrir o arquivo, o bit de leitura estará concluído.

    
por 25.09.2015 / 02:57
3

Sim, isso é um problema, você nunca pode ler e escrever de / para o mesmo canal. Pense nisso desta maneira: escrever um arquivo o configuraria para começar como vazio e, em seguida, a leitura dele não produziria nada.

    
por 24.09.2015 / 16:07