Как проверить, существует ли именованный канал?

Чтобы проверить, существует ли файл, выполните следующие действия:

if [ -f $FILE ];

но он не работает, если $FILE является именованным каналом, например ls -l pipename показывает канал с атрибутом p:

prw-r--r-- 1 usr grp 0 Nov 26 02:22 pipename

Как проверить, существует ли именованный канал?

Ответ 1

Вы можете использовать -p test

if [[ -p $pipe ]]

или

if [ -p "$pipe" ]

Ответ 2

На дружественной странице man перечислены несколько операторов проверки файлов, в том числе:

-e file
       True if file exists.

и

-f file
       True if file exists and is a regular file.

и

-p file
       True if file exists and is a named pipe (FIFO).

Не используйте только -f все время; используйте тот, который делает то, что вы имеете в виду.