我嘗試使用 -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