Cómo comprobar la presencia de una canalización con nombre en el sistema de archivos

Cómo comprobar la presencia de una canalización con nombre en el sistema de archivos

Intenté usar el indicador -f para probar si hay una canalización con nombre presente

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

Esta comprobación no parece correcta. Entonces, ¿quizás una canalización con nombre no sea un archivo, sino algo más?

Respuesta1

Necesita usar la -pconstrucción para ver si el archivo es del tipollamadotubo. Funciona con la prueba estándar [(compatible con POSIX) y los operadores de prueba extendidos [[(específicos de bash/zsh)

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

De las manpáginas de bash

-p file

cierto sifileexiste y es una canalización con nombre (FIFO).

o use el filecomando con -bpara simplemente imprimir la información del tipo sin el nombre del archivo. Es -bposible que no sea compatible con POSIX

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

Sin el -b, uno podría hacer

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

información relacionada