3 votes

Rediriger les entrées du code ou du terminal vers le code ou le terminal en cours d'exécution ?

Actuellement, j'utilise un logiciel script qui nécessite une entrée continue via le terminal. Le script évalue les fichiers en continu en recevant les informations suivantes entrée du chemin et évalue le fichier dans le chemin d'accès.

L'objectif : Est-il possible d'exécuter un script nécessitant une entrée en passant par l'entrée de un autre terminal ou script.

Le logiciel d'évaluation charge beaucoup de données avant d'être prêt à être traité, c'est pourquoi je préférerais laisser le logiciel fonctionner et simplement passer des données de temps en temps. Au lieu de démarrer le logiciel et de charger toutes les données requises (ce qui prend du temps).

Je peux mentionner que j'ai essayé tty à trouver :
$ /dev/pts/19
puis par l'intermédiaire d'autres terminaux : $ <command> <myinput> > /dev/pts/19
où la commande est remplacée par "echo / print".
Cependant, il ne fait qu'imprimer dans l'autre terminal, il n'agit pas comme une entrée pour le logiciel.

2voto

Kamil Maciorowski Points 57004

Créer un tuyau nommé :

mkfifo pipe

Assurez-vous qu'il ne se ferme pas (voir cette réponse ):

exec 3<>pipe

Alimentez votre script à partir du tuyau :

<pipe your_script.sh
# or if you want to see incoming data
<pipe tee >(your_script.sh)

Ensuite, à partir d'un autre terminal, utilisez echo , printf ou autre :

echo "/some/path/or/another/input" > pipe

o

cat large_input.txt > pipe

o

script_that_generates_input.sh > pipe

Mais attention aux conditions de course ! N'alimentez pas le tuyau à partir de deux sources ou plus en même temps ; attendez toujours que la commande d'alimentation en cours se termine avant d'exécuter la suivante. Notez que si une source transmet beaucoup de données, celles-ci peuvent être bloquées à mi-chemin, jusqu'à ce que la partie réceptrice les traite. Mettre mbuffer (avec des arguments adaptés à votre cas d'utilisation) avant your_script.sh pour créer une mémoire tampon capable de stocker davantage de données entrantes avant qu'une commande d'alimentation ne soit mise en attente.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X