ファイルシステム上の名前付きパイプの存在を確認する方法

ファイルシステム上の名前付きパイプの存在を確認する方法

名前付きパイプが存在するかどうかをテストするために-fフラグを使用しようとしました

if [[ ! -f "$fifo" ]]; then
  echo 'There should be a fifo.lock file in the dir.' > /dev/stderr
  return 0;
fi

このチェックは正しくないようです。名前付きパイプはファイルではなく、何か他のものでしょうか?

答え1

-pファイルの型を確認するには、構文を使用する必要があります。名前パイプ。標準テスト[(POSIX準拠)と拡張テスト演算子[[(bash/zsh固有)で動作します。

if [[ -p "$fifo" ]]; then
    printf '%s is a named pipe' "$fifo"
fi

manbashのページから

-p file

真の場合file存在し、名前付きパイプ (FIFO) です。

または、fileコマンドを とともに使用して-b、ファイル名なしでタイプ情報のみを出力します。 は-bPOSIXに準拠していない可能性があります。

if [ $(file -b "$fifo") = "fifo (named pipe)" ]; then
   printf '%s is a named pipe' "$fifo"
fi

がなければ-b

type=$(file "$fifo")
if [ "${type##*: }" = "fifo (named pipe)" ]; then 

関連情報