如何檢查檔案系統上是否存在命名管道

如何檢查檔案系統上是否存在命名管道

我嘗試使用 -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僅列印類型資訊而不顯示檔案名稱。可能-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 

相關內容