Como verificar a presença de pipe nomeado no sistema de arquivos

Como verificar a presença de pipe nomeado no sistema de arquivos

Tentei usar o sinalizador -f para testar se um pipe nomeado está presente

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

esta verificação não parece correta. Então, talvez um pipe nomeado não seja um arquivo, mas algo mais?

Responder1

Você precisa usar a -pconstrução para ver se o arquivo é do tiponomeadocano. Ele funciona com o teste padrão [(compatível com POSIX) e os operadores de teste estendido [[(específico do bash/zsh)

if [[ -p "$fifo" ]]; then
    printf '%s is a named pipe' "$fifo"
fi

Das manpáginas do bash

-p file

Verdadeiro sefileexiste e é um pipe nomeado (FIFO).

ou use o filecomando com para -bapenas imprimir as informações do tipo sem o nome do arquivo. Pode -bnão ser compatível com POSIX

if [ $(file -b "$fifo") = "fifo (named pipe)" ]; then
   printf '%s is a named pipe' "$fifo"
fi

Sem o -b, alguém poderia fazer

type=$(file "$fifo")
if [ "${type##*: }" = "fifo (named pipe)" ]; then 

informação relacionada