Linux bash スクリプトを FreeBSD に移植しようとしています。スクリプトは、何らかのアクションを実行するかどうかを決定する前に、ファイルが (書き込み用に) 開いているかどうかを確認する必要があります。
Linux では、次のfuser
コマンドを使用すると簡単に実行できました。
if [[ ! `/usr/bin/fuser "$FILE"` ]]
then
...
fi
ただし、FreeBSD では、fuser
コマンドは完全に壊れているように見え (これによって裏付けられます)、適切な終了コードや実際に有用な出力を stdout に返しません。たとえば、アクティブに書き込まれているファイルでは次のようになります。
# fuser file
file:
編集:
ウラジミール・ボトカのコメント:
「FreeBSD 12.0 ショーでの簡単なテスト」:
# tail -f /scratch/test-file`
# fuser /scratch/test-file
/scratch/test-file: 45042
# echo $?
0
# ps ax | grep 45042
45042 0 I+ 0:00.00 tail -f /scratch/test-file
45232 1 R+ 0:00.00 grep 45042
私の FreeBSD ボックス (FreeBSD 12 も) では、同じテストで次の結果が得られます。
# tail -f /scratch/test-file
# fuser /scratch/test-file
/scratch/test-file:
# echo $?
0
ウラジミール・ボトカのコメント:
ファイルを開き、入力を待ち、入力をファイルに書き込む単純な C プログラムを使用して、ファイルへの書き込みをテストしてみましょう。
コンパイルされた C コードに対する私のテストは次のとおりです。
# ./a.out
Enter num:
# fuser /scratch/test-file
/scratch/test-file:
# echo $?
0
したがって、fuser
壊れているようです。ただし、両方とも FreeBSD 12 であるため、Vladimir Botka のシステムではなく、私のシステムでのみ壊れているようです。
この情報を使用lsof
またはfstat
取得できるようですが、スクリプトをより複雑にする出力の複雑な解析が必要です。fuser
FreeBSD で動作するようなファイルが使用されているかどうかを判断するための単純な「はい/いいえ」コマンドを教えてくれる人がいるかどうか疑問に思いましたか?
どうもありがとう、