2010-03-15 1 views
3

J'ai donc un programme Linux qui s'exécute dans une boucle while (true), qui attend l'entrée de l'utilisateur, le traite et imprime le résultat sur stdout. Je veux écrire un script shell qui ouvre ce programme, le nourrir à partir d'un fichier txt, une ligne à la fois et enregistrer la sortie du programme pour chaque ligne dans un fichier.comment envoyer du texte à un processus dans un script shell?

Je veux savoir s'il y a une commande pour:
- ouvrir un programme
- envoyer des messages texte à un processus
- recevoir la sortie de ce programme

Un grand merci.

Répondre

1

On dirait que vous voulez quelque chose comme ceci:

cat file | while read line; do 
    answer=$(echo "$line" | prog) 
done 

Ceci lancera une nouvelle instance de prog pour chaque ligne. La ligne sera l'entrée standard de prog et la sortie sera placée dans la variable answer pour que votre script puisse être traité.

Certaines personnes s'opposent au "fichier cat" | car cela crée un processus où vous n'en avez pas vraiment besoin. Vous pouvez également utiliser la redirection de fichier en le mettant après la done:

while read line; do 
    answer=$(echo "$line" | prog) 
done < file 
+1

Est-ce que le descendant se préoccuperait d'expliquer ce qu'il ou elle trouve incorrect? –

1

Avez-vous regardé pipes and redirections? Vous pouvez utiliser des tuyaux pour alimenter les entrées d'un programme dans un autre. Vous pouvez utiliser la redirection pour envoyer le contenu des fichiers aux programmes et/ou écrire la sortie dans les fichiers.

1

Je suppose que vous voulez un script écrit en bash.

  1. Pour ouvrir un fichier, il vous suffit de saisir un nom.
  2. Pour envoyer un texte à un programme que vous soit passer à travers | ou avec < (prendre d'entrée de fichier)
  3. Pour recevoir la sortie que vous utilisez > pour rediriger la sortie vers un certain fichier ou >> de rediriger ainsi tout en ajoutant les résultats au lieu de tronquer le fichier

pour obtenir ce que vous voulez bash, vous pouvez écrire:

#/bin/bash 

cat input_file | xargs -l1 -i{} your_program {} >> output_file 

Cela appelle your_program pour ea ligne ch de input_file et ajoute les résultats à output_file

Questions connexes