我尝试使用 -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
来自man
bash 页面
-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