Tubos nomeados sempre abertos para escrita

0

Eu quero fazer um pipe nomeado que esteja sempre aberto para leitura e escrita.

Então eu digitei isso no terminal:

mkfifo testpipe
exec 3<> testpipe

Tudo está funcionando corretamente. Mas quando eu faço um script de shell com esses comandos, ele faz apenas um pipe nomeado. Não é aberto para leitura e escrita.

Alguém conhece uma solução?

    
por user229041 27.02.2014 / 22:47

2 respostas

1

Não consigo ver completamente o que você deseja fazer, como usá-lo em um ou em vários scripts, mas tenho uma ideia do que deu errado:

Para mim, parece que você estava tentando combinar duas coisas e, ao combiná-las, você teve problemas:

Cheira a impasse

Abrindo um arquivo em um descritor de arquivo extra do shell atual:

$ exec 3<>file

E usando um arquivo especial fifo:

$ mkfifo fifo
$ exec 3> fifo

E então, você tentou usá-los de uma forma que criou um bloqueio, por exemplo, esperando para terminar de escrever, enquanto você planeja ler os dados mais tarde - mas nunca chegará tão longe.

Ambas são ferramentas poderosas, mas são difíceis de usar juntas em um único script de shell.


Exemplos

Aqui está a seção de exemplo relevante da Bash One-Liners Explained, Part III: Tudo sobre redirecionamentos .

Observe como dois scripts independentes são usados na seção 13 ao trabalhar com o fifo:

% bl0ck_qu0te%     
por Volker Siegel 09.07.2015 / 00:19
0

Se você tornar o script executável e executá-lo como qualquer outro programa, ele será executado em um novo shell; portanto, o canal será aberto nesse shell e sairá, retornando ao shell interativo que não foi afetado. Para que seu shell interprete o script em vez de executar um novo shell para fazê-lo, você precisa informar ao seu shell atual para abrir o arquivo e interpretar seu conteúdo usando o comando source . Você também pode usar o atalho . , como em . myscript.sh .

    
por psusi 28.02.2014 / 03:28