答えにメカニズムを使用してください。https://unix.stackexchange.com/a/274499/5132Zシェルから:
(
flock -x 200
echo "test";
) 200>mylockfile2
返品
zsh: parse error near `200'
Bashではうまくいきます。ここで何が間違っている可能性がありますか?
答え1
Bashは、ユーザーが通常のリダイレクト構文を使用して9より大きいfdを直接開くことを可能にする唯一のシェルです。したがって、他のシェルではこのコマンドは同じです。(...) 200 1>mylockfile2
これは構文エラーです。 posix は 0-9 に対してのみサポートを要求します。ロックで使用されているfdがすでに使用されていないことを確認するには、特別に設計された構文を使用して次の使用可能なfdを開くことができます。
(foo "$lockfd";...) {lockfd}>file
答え2
zsh
bash
両陣営がフェンスを越えて覗き、互いのアイデアを盗む努力にもかかわらず、そうではありません。また、これflock
によりutil-linux
携帯性が制限される可能性があります。 ZSHソリューションは、次のコマンドをzsystem
提供するこのモジュールを使用できます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
)