Escreva para FIFO somente se existir

2

A maioria dos exemplos que vejo sobre a gravação em um FIFO dizem para usar os comandos echo ou cat e redirecionar o stdout para o arquivo. Por exemplo,

echo 'a' > /tmp/my_fifo

No entanto, isso criará um arquivo regular se o FIFO ainda não existir. Existe algum análogo para mkfifo , mas para escrever isso falharia se não existisse? Isto é, algo semelhante a:

echo 'a' | write-to-existing-file /tmp/my_fifo
    
por cpburnz 07.09.2017 / 21:30

1 resposta

7

De acordo com o manual BASH:

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

Então:

if [[ -p /tmp/my_fifo ]]; then
    # commands to execute
fi

A pergunta tem a tag bash . No contexto, o uso de [[ e ]] é específico para BASH. (Tangencialmente, [[ e ]] também funcionam com o zsh e o shell Korn.) Consulte BashFAQ / 031 . Scripts portáteis devem ser escritos com [ e ] , que funcionam em todos os shells POSIX.

    
por 07.09.2017 / 21:38