シェルスクリプトの集約ファイル記述子

シェルスクリプトの集約ファイル記述子

私はこれが中断することなくペアリングを提供すると思いましたが、begin-endそうではありません。

#!/bin/bash
fun()(
    flock 1 || { echo >&2 "$BASHPID: FAIL: $?"; exit 1; }
    echo "$BASHPID begin"
    sleep 1;
    echo "$BASHPID end"
)
fun &
fun &
fun &
fun &
fun &
fun &
fun &
fun &
fun &
wait

私は何が間違っていましたか?

ベストアンサー1

このアプローチは次のように動作します。

fun()(
  (flock 9 || { echo >&2 "$BASHPID: FAIL: $?"; exit 1; }
   echo "$BASHPID begin"
   sleep 1;
   echo "$BASHPID end"
  ) 9>test
)

これにより、保護する必要があるコマンドが完了しない限り、ロックされたファイルは閉じられません。 (もちろん、testより適切なものと交換する必要があります。例えば使用mktemp。 )

おすすめ記事