Script: execution de commande par un logiciel [Résolu/Fermé]

Messages postés
52
Date d'inscription
mardi 26 juin 2012
Statut
Membre
Dernière intervention
18 juillet 2019
- - Dernière réponse : mamiemando
Messages postés
28956
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 août 2019
- 11 déc. 2015 à 10:40
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 :)
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
17799
Date d'inscription
lundi 15 janvier 2007
Statut
Non membre
Dernière intervention
23 août 2019
4426
1
Merci
hello
essayer
evolver monfichier  <<EOF
gogo
autres commandes
quit
EOF

Dire « Merci » 1

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 59066 internautes nous ont dit merci ce mois-ci

mamiemando
Messages postés
28956
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 août 2019
6622 -
En théorie non.

Exemple :

#!/bin/sh
echo "1"
cat << EOF
bonjour
comment ça va ?
EOF
echo "2"
exit 0


... donne à l'exécution :

1
bonjour
comment ça va ?
2


Peut-être que tu es en mode
set -e
et qu'evolver retourne un code d'exécution différent de 0 ?
http://stackoverflow.com/questions/4381618/exit-a-script-on-error

Bonne chance
in_die
Messages postés
52
Date d'inscription
mardi 26 juin 2012
Statut
Membre
Dernière intervention
18 juillet 2019
-
Ha oui effectivement ca marche!
j'avais un bug dans ma syntaxe conditionnelle (faire attention aux espaces...)

Merci :)
mamiemando
Messages postés
28956
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 août 2019
6622 -
J'en déduis que ton problème est résolu ? Si oui, un petit résumé de ta solution sera sans doute apprécié par les personnes qui pourraient être confrontées au même problème ;-)
in_die
Messages postés
52
Date d'inscription
mardi 26 juin 2012
Statut
Membre
Dernière intervention
18 juillet 2019
-
Oui problème résolu.

J'ai utilisé une redirection EOF pour éviter d'avoir un fichier supplémentaire contenant commandes. Comme je voulais intérargir avec l'utilisateur et utiliser la valeur choisie dans les procédures evolver, j'ai bricolé un truc du style:


#!/bin/sh

echo "Voulez-vous 5 ou 10?"
read macst

if [ $macst -eq 5 ]
then
evolver fichier.fe << EOF
command1
cst:=5
command2
EOF
else
evolver fichier.fe << EOF
command3
cst:=10
command4
EOF
fi
mamiemando
Messages postés
28956
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 août 2019
6622 -
Parfait merci pour ces précisions et bonne continuation :-)
Messages postés
28956
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
22 août 2019
6622
0
Merci
Bonjour,

Je n'ai pas très bien compris de quel logiciel, et s'il s'agissait ou nom d'un logiciel en ligne de commande. Qu'est ce que "gogo" ?

Si le programme est un programme en mode texte

En shell tu peux pour un programme qui demande des lignes de commandes, lui injecter ce que tu aurais tapé avec un clavier via un fichier d'entrée.

Prenons un exemple concret, supposons que ton logiciel soit par exemple ce petit programme (que je vais nommer toto.sh) :

#!/bin/sh

echo "x? "
read x
echo "y? "
read y

echo "x = $x y = $y"
exit 0


Si j'exécute toto.sh on me demande bien de saisir les valeurs de x et y :

(mando@velvet) (~) $ sh toto.sh 
x?
plop
y?
pouet
x = plop y = pouet


Supposons maintenant que je veuille automatiser ma saisie en pré-replissant ce que je vais taper à ce programme dans un fichier (mettons toto.txt). La première ligne correspondra à la première saisie, la seconde à la deuxième saisie, etc.

(mando@velvet) (~) $ echo "plip" > toto.txt
(mando@velvet) (~) $ echo "plap" >> toto.txt
(mando@velvet) (~) $ cat toto.txt
plip
plap


Ok mon fichier est prêt, voyons comment l'injecter dans toto.sh :

(mando@velvet) (~) $ sh toto.sh < toto.txt 
x?
y?
x = plip y = plap


Si le programme a une interface graphique

Idéalement ton programme graphique ne fait qu'envelopper une librairie, qui est met aussi à disposition une API shell (voir partie précédente) qu'on peut scripter. Ce serait par exemple le cas d'APT : scripter la logithèque c'est difficile, écrire un script shell avec des commandes apt qui vont bien, c'est facile.

Autre cas possible, ton programme ne fait qu'instrumenter une librairie. Dans ce cas écrire ton programme revient juste à appeler les bonnes fonctions de cette librairie, avec les bons paramètres et dans le bon ordre.

Si rien de tout ça n'est possible, c'est plus compliqué. Il reste possible de scripter tes périhpériques (par exemple ta souris) pour imiter ce qu'un humain ferait :
http://tuxradar.com/content/xdotool-script-your-mouse

Il faut alors lancer le programme en arrière plan (par exemple
./toto &
) et espérer qu'un humain ne s'amuse pas à perturber la souris ou le clavier pendant l'exécution de ton script.

Bonne chance
in_die
Messages postés
52
Date d'inscription
mardi 26 juin 2012
Statut
Membre
Dernière intervention
18 juillet 2019
-
Oui c'est bien comme ca, sauf que maintenant j'aimerais faire la même chose sans utiliser de fichier intermédiaire (j'ai beaucoup de fichiers pour faire toutes la procédure), c'est à dire écrire mes commandes directement dans mon script, est ce que c'est possible?

J'ai tenté avec EOF mais mon script s'arrête après le second EOF.