Как проверить наличие именованного канала в файловой системе

Как проверить наличие именованного канала в файловой системе

Я попробовал использовать флаг -f, чтобы проверить наличие именованного канала.

if [[ ! -f "$fifo" ]]; then
  echo 'There should be a fifo.lock file in the dir.' > /dev/stderr
  return 0;
fi

эта проверка не кажется корректной. Так что, возможно, именованный канал — это не файл, а что-то другое?

решение1

Вам нужно использовать -pконструкцию, чтобы проверить, имеет ли файл типназванныйpipe. Работает со стандартными тестовыми [(совместимыми с 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 

Связанный контент