如何检查文件系统上是否存在命名管道

如何检查文件系统上是否存在命名管道

我尝试使用 -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 

相关内容