我尝试使用 -f 标志来测试命名管道是否存在
if [[ ! -f "$fifo" ]]; then
echo 'There should be a fifo.lock file in the dir.' > /dev/stderr
return 0;
fi
Run Code Online (Sandbox Code Playgroud)
这个检查似乎不正确。那么也许命名管道不是文件,而是其他东西?
您需要使用该-p构造来查看文件是否属于命名管道类型。它适用于标准测试[(符合 POSIX 标准)和扩展测试操作符[[(特定于 bash/zsh)
if [[ -p "$fifo" ]]; then
printf '%s is a named pipe' "$fifo"
fi
Run Code Online (Sandbox Code Playgroud)
来自manbash 页面
-pfile如果
file存在并且是命名管道 (FIFO),则为 True。
或使用file带有 的命令-b仅打印类型信息而不显示文件名。可能-b不符合 POSIX 标准
if [ $(file -b "$fifo") = "fifo (named pipe)" ]; then
printf '%s is a named pipe' "$fifo"
fi
Run Code Online (Sandbox Code Playgroud)
没有-b, 人们可以做
type=$(file "$fifo")
if [ "${type##*: }" = "fifo (named pipe)" ]; then
Run Code Online (Sandbox Code Playgroud)