zshではクラスタの使用は失敗しますが、bashでは機能しますか?

zshではクラスタの使用は失敗しますが、bashでは機能しますか?

答えにメカニズムを使用してください。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

zshbash両陣営がフェンスを越えて覗き、互いのアイデアを盗む努力にもかかわらず、そうではありません。また、これ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
)

関連情報