web-dev-qa-db-ja.com

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

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

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

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

2
user282164

-p構文を使用して、ファイルのタイプがnamedパイプであるかどうかを確認する必要があります。標準テスト[(POSIX準拠)および拡張テスト演算子[[(bash/zsh固有)で動作します

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

Bashのmanページから

-pfile

fileが存在し、名前付きパイプ(FIFO)である場合はTrue。

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

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 
2
Inian