2009-10-02 11 views
5

Est-il possible de faire des sélections ou des sondages sur des descripteurs de fichiers dans bash? L'essence de ce que je suis en train de faire est la suivante:Equivalent de select ou poll dans bash

mkfifo fifo 
exec 3<fifo 
PROMPT_COMMAND="while read -t 0 line; do echo \$line; done <&3" 

Le exec est là pour garder le tuyau ouvert (sinon il serait fermé à la fin de chaque boucle). En théorie, cela produirait n'importe quoi entrant dans le tuyau avant chaque invite. Cependant, cela ne semble pas fonctionner, car avec -00 il n'essaie même pas de lire.

-t 1 fonctionne comme un charme, mais cela force un délai d'une seconde à chaque invite, ce qui n'est pas ce que je veux.

Optimal serait de faire un select avec un délai de .2 secondes (si j'exécute une commande qui à son tour provoque l'écriture de quelque chose dans le pipe, il y a forcément un court délai car je travaille avec asynchrone messages), et ce délai je peux vivre avec. Zero timeout serait probablement ok, alors je vais juste créer un programme pour avoir un délai d'une seconde.

Des idées?

Répondre

1

Je stumbled on this aujourd'hui, et il fait résout mon problème très élégamment. screen permet de diviser la fenêtre de terminal en cours, où je peux réduire une partie de la fenêtre à seulement quelques lignes, où je garde mon entrée, et juste cat fifo dans l'autre partie de la fenêtre. L'écran bascule beaucoup plus que je ne le savais déjà (détacher seul en fait l'un des meilleurs outils de tous les temps).

0

Les éléments suivants ne seraient-ils pas équivalents?

$> tail -f Fifo

Vous pouvez également spécifier des intervalles de sommeil ('-s'), et --max-Retries inchangés-statistiques, etc.

+0

queue non (la queue est pour les fichiers pouvant être recherchés), cat ferait ce que vous suggérez, mais cela casserait votre ligne de commande si les données arrivent quand vous tapez votre commande. Ou vous auriez à le faire dans une console différente si vous en avez un. – falstro