Script: execution de commande par un logiciel

Résolu/Fermé
in_die Messages postés 52 Date d'inscription mardi 26 juin 2012 Statut Membre Dernière intervention 18 juillet 2019 - 3 déc. 2015 à 16:01
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 - 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 :)
A voir également:

2 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
4 déc. 2015 à 08:33
hello
essayer
evolver monfichier  <<EOF
gogo
autres commandes
quit
EOF
1
in_die Messages postés 52 Date d'inscription mardi 26 juin 2012 Statut Membre Dernière intervention 18 juillet 2019
Modifié par in_die le 7/12/2015 à 17:45
Oui merci, mais EOF fait quitter mon script à la fin, alors que j'ai besoin de rester dans le script pour reouvrir un autre fichier evolver et continuer à lancer d'autres commandes.
0
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
7 déc. 2015 à 21:58
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 ?
https://stackoverflow.com/questions/4381618/exit-a-script-on-error

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

Merci :)
0
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
8 déc. 2015 à 21:10
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 ;-)
0
in_die Messages postés 52 Date d'inscription mardi 26 juin 2012 Statut Membre Dernière intervention 18 juillet 2019
9 déc. 2015 à 16:43
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
0
mamiemando Messages postés 33077 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 18 avril 2024 7 748
3 déc. 2015 à 20:12
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 :
https://linuxformat.com

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
0
in_die Messages postés 52 Date d'inscription mardi 26 juin 2012 Statut Membre Dernière intervention 18 juillet 2019
7 déc. 2015 à 17:31
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.
0