Usando o flock falha com zsh mas funciona no bash?

0

Empregando o mecanismo a partir da resposta no link no shell Z:

(
flock -x 200

echo "test";

) 200>mylockfile2

retorna

zsh: parse error near '200'

Enquanto no bash ele funciona corretamente. Qual pode ser o problema aqui?

    
por Chris Stryczynski 14.10.2018 / 12:19

2 respostas

3

O Bash é o único shell que permite ao usuário abrir um fd maior que 9 diretamente usando a sintaxe de redirecionamento normal. Assim, em outros shells, o comando é equivalente a (...) 200 1>mylockfile2 , que é um erro de sintaxe. posix apenas mandatos de apoio 0-9. Se você realmente quiser garantir que o fd usado com o bloqueio já não esteja em uso, você pode usar a sintaxe especificamente projetada para abrir o próximo fd disponível. (foo "$lockfd";...) {lockfd}>file

    
por 14.10.2018 / 17:44
1

zsh não é bash apesar de alguns esforços entre os dois campos de espreitar por cima da cerca e roubar ideias uns dos outros. Além disso, flock parece vir de util-linux , portanto a portabilidade pode ser limitada. Uma solução ZSH pode, em vez disso, usar o módulo zsystem ; este módulo fornece um comando flock :

#!/usr/bin/env zsh
zmodload zsh/system
(
   local lockvar
   touch lockfile
   zsystem flock -f lockvar lockfile
   print >&2 got lock
   sleep 10
   zsystem flock -u $lockvar
   print >&2 end lock
)
    
por 14.10.2018 / 16:34

Tags