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 33346 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 novembre 2024 - 11 déc. 2015 à 10:40
mamiemando Messages postés 33346 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 novembre 2024 - 11 déc. 2015 à 10:40
A voir également:
- Script: execution de commande par un logiciel
- Script vidéo youtube - Guide
- Ghost script - Télécharger - Polices de caractères
- Script bat - Guide
- Microsoft activation script - Accueil - Windows
- Executeur de script - Télécharger - Édition & Programmation
2 réponses
dubcek
Messages postés
18753
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
7 novembre 2024
5 619
4 déc. 2015 à 08:33
4 déc. 2015 à 08:33
hello
essayer
essayer
evolver monfichier <<EOF
gogo
autres commandes
quit
EOF
mamiemando
Messages postés
33346
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
8 novembre 2024
7 803
3 déc. 2015 à 20:12
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) :
Si j'exécute toto.sh on me demande bien de saisir les valeurs de x et y :
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.
Ok mon fichier est prêt, voyons comment l'injecter dans toto.sh :
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
Bonne chance
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
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
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.
J'ai tenté avec EOF mais mon script s'arrête après le second EOF.
Modifié par in_die le 7/12/2015 à 17:45
7 déc. 2015 à 21:58
Exemple :
... donne à l'exécution :
Peut-être que tu es en mode 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
8 déc. 2015 à 12:34
j'avais un bug dans ma syntaxe conditionnelle (faire attention aux espaces...)
Merci :)
8 déc. 2015 à 21:10
9 déc. 2015 à 16:43
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: