
Я попробовал использовать флаг -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