Envisagez le scénario suivant:Empêcher FIFO de fermeture/réutilisation fermée FIFO
un FIFO nommé test
est créé. Dans une fenêtre de terminal (A) je cours cat <test
et dans un autre (B) cat >test
. Il est maintenant possible d'écrire dans la fenêtre B et d'obtenir la sortie dans la fenêtre A. Il est également possible de terminer le processus A et de le relancer tout en continuant à utiliser cette configuration comme suspectée. Toutefois, si vous terminez le processus dans la fenêtre B, B (pour autant que je sache) envoie un EOF via le FIFO pour traiter A et mettre fin à cela aussi. En fait, si vous exécutez un processus qui ne se termine pas sur EOF, vous ne pourrez toujours pas utiliser votre FIFO que vous avez redirigé vers le processus. Ce que je pense, c'est que ce FIFO est considéré comme fermé.
Est-il possible de contourner ce problème?
La raison pour laquelle j'ai rencontré ce problème est que je voudrais envoyer des commandes à mon serveur minecraft en cours d'exécution dans une session d'écran. Par exemple: echo "command" >FIFO_to_server
. C'est probablement possible de faire en utilisant l'écran seul mais je ne suis pas très à l'aise avec l'écran je pense qu'une solution utilisant uniquement des tuyaux serait plus simple et plus propre.
Malheureusement, 'tail' attend EOF pour qu'il ne passe pas le contenu du pipeline ligne par ligne. – pabouk
@pabouk Merci d'avoir signalé ce bug: 'tail -n 1 -f' ignorerait l'entrée qui était disponible avant qu'elle ne démarre ou ne soit disponible plus rapidement qu'elle ne pourrait en lire.Je voulais écrire 'tail -n +1 -f', qui commence immédiatement à sortir. – Gilles
Merci. Je l'ai déjà essayé mais '-n + 1' ne fonctionnait pas comme prévu. Maintenant que vous avez confirmé que c'est la bonne façon, j'ai examiné le problème plus loin et j'ai réalisé que le problème est dans la mise en mémoire tampon des blocs (au lieu de la mise en mémoire tampon par défaut) de la queue de tail. La solution pour la tuyauterie ligne par ligne: 'stdbuf -oL tail -n +1 -f client_pipe | command ' – pabouk