Forum Programmation.shell script: execution de commande par un logiciel

Posté par . Licence CC by-sa
Tags : aucun
1
3
déc.
2015

Bonjour,

je souhaite écrire un script qui lance un logiciel, puis fait executer des commandes à mon logiciel, typiquement
evolver monfichier (mon logiciel)
gogo (la commande du logiciel)

mais je n'arrive pas à trouver la formulation en langage shell, car mon logiciel est lancé et ensuite je dois taper moi meme mes commandes.
Pouvez vous m'aider?

Merci :)

  • # Entrée standard

    Posté par (page perso) . Évalué à 2.

    Il faut que tu regardes du côté de l'entrée standard. Par défaut, quand tu lances un programme en ligne de commande, l'entrée standard est tout simplement le clavier.

    Il faut dire que tu souhaites lire une autre source. Par exemple, un fichier :

    evolver monfichier < mes_commandes.txt

    On peut aussi utiliser des pipes, où on redirige la sortie standard d'une commande vers l'entrée standard d'une autre (ici la sortie de cat) :

    cat mes_commandes.txt | evolver monfichier

  • # re

    Posté par . Évalué à 1.

    Ok, merci, c'est pas mal mais avec cette formulation mes commandes s'éxecutent et après le shell reprend automatiquement la main.

    Il faudrait que j'arrive à garder la main aussi sur mon logiciel, donc je peux peut etre faire ouvrir un deuxieme shell pour l'execution des commandes afin que le logiciel reste ouvert?!

    • [^] # Re: re

      Posté par (page perso) . Évalué à 1.

      Je ferais un petit script bash 'launcher.sh' dans le genre :

      #!/bin/sh
      cat le_fichier_avec_les_premieres_commandes.txt
      while read line
      do
         echo $line
      done 
      

      Et ensuite, tu lances ta commande avec
      launcher.sh | evolver monfichier

      Attention, j'ai pas testé. C'est juste pour donner l'idée ;)

      • [^] # Re: re

        Posté par . Évalué à 1.

        Pour cette option, je ne vois pas trop ce que fait while read line??

        • [^] # Re: re

          Posté par (page perso) . Évalué à 2.

          Elle lit une ligne sur l'entrée standard. Le "echo" rejoue ensuite cette ligne sur la sortie standard.

          Ainsi, sur la sortie standard, tu as :
          - le contenu du fichier le_fichier_avec_les_premieres_commandes.txt (la commande 'cat' du script);
          - suivi de ce qui est saisi au clavier (la commande 'echo' du script).

  • # sinon y'a expect

    Posté par . Évalué à 6.

    #!/usr/bin/expect
    
    spawn evolver monfichier
    
    send "gogo\r"
    send "exit\r"
    
    expect EOF
    

    https://gist.github.com/Fluidbyte/6294378

    • [^] # Re: sinon y'a expect

      Posté par . Évalué à 1. Dernière modification le 04/12/15 à 12:15.

      Ok, on m'a déjà parlé de expect mais je n'ai jamais expérimenté, je vais tester, merci.

  • # je comprend mal, alors je reformule la question

    Posté par . Évalué à 3.

    en gros tu veux scripter des commandes qui devront etre executer DANS le logiciel evolver ?

    il faut alors regarder les options de evolver, car c'est surement par là qu'il faut fouiller, si ca se trouve il y a une option qui permet de faire un truc simple comme ca :

    evolver --script monfichier-de-commande monfichier

    • [^] # Re: je comprend mal, alors je reformule la question

      Posté par . Évalué à 1.

      Oui c'est exactement ca!
      Ok je vais regarder par là, je crois que l'option -f permet d'utiliser un script.

      Ensuite je souhaite que mon script lance evolver, puis fasse éxécuter des commandes à evolver,
      donc je n'aurais qu'à mettre une ligne du type:

      evolver -f commandes.txt fichier.fe

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.