comment faire en bash script .... [ou perl]

comment faire en bash script .... [ou perl] - Linux et OS Alternatifs

Marsh Posté le 15-07-2004 à 14:32:34    

Bonjour,
 
    Désolé pour ce titre peu explicite, mais je ne sais pas trop comment définir mon problème :
 
Je veux faire un script qui lance un programme (lequel est un genre de shell ou telnet...) et ensuite passer des commandes à ce programme.
 
c'est comparable à un script qui se conecte en ftp pour récupérer un fichier :
 
#!/bin/sh
HOST='monsiteftp'
USER='public'
PASSWD='public'
ftp -nv $HOST <<END_SCRIPT
quote USER $USER
quote PASS $PASSWD
cd rep
get fichier.txt
quit
END_SCRIPT
 
dans mon cas il s'agit un programme propriétaire qui n'a rien a voir avec ftp.
une fois que j'ai lancé ce programme, je veux effectuer 2 commandes,  
en général la première commande passe, mais la 2emme est envoyée alors que le programme n'a pas répondu à la première commande ! et donc la 2emme commande ne passe pas :/
 
dans l'exemple du ftp cela reviendrai a vouloir faire :  
get fichier.txt
get fichier2.txt  
et que le 'get fichier2.txt' soit envoyé alors que le 'get fichier.txt' n'ai pas fini.
 
le pb c'est que dans le cas du ftp tout fonctionne bien, et dans le cas du programme non :/
 
 
je suis perdu et je ne vois pas comment m'en sortir.
 
merci.


Message édité par Kytrix le 15-07-2004 à 16:06:57
Reply

Marsh Posté le 15-07-2004 à 14:32:34   

Reply

Marsh Posté le 15-07-2004 à 14:36:50    

Commande 1
test du resultat
si resultat ok alors
Commande 2
fin si
 
voilà tout simplement..
 
j'ai déja eut ce genre de problème aussi et c'est le seul moyen de faire si l'application proprio libere la suite d'elle même


---------------
If everything else failed then read the instructions
Reply

Marsh Posté le 15-07-2004 à 14:42:38    

oui me le problème (corrige moi si je me trompe)
c'est qu'entre 'monprog <<END_SCRIPT' et 'END_SCRIPT'
toutes les commandes sont envoyée au programme !!
si je voulais faire :
monprog <<FIN
commande1
if mon test
commande2
FIN
 
j'aurais mon prog qui me renverrai : 'if' command not foud !
 
:S
if faudrai que je puisse :
-récupérer ce que 'monprog' renvoi a l'écran
-effectuer un test sans qu'il soit 'envoyé' a monprog
 
tu vois ce que je veux dire ? :S

Reply

Marsh Posté le 15-07-2004 à 14:47:45    

non même en FTP par exemple
la commande ! permet de lancer du shell
 
et tu peux lancer aussi autre solution :
commande 1 << fsdfsdfs
.....
fsdfsdfs
test
commande 2 << dsfsdfsdfs
....
dsfsdfsdfs
 
ou encore plus simple tu fais
 
tant que fichier err existe pas
programme << FIN 2> err
....
FIN
done
 
si une erreur se produit  
le fichier err est crée et le programe killé par l'arret de la boucle tant que...
 
suffit de savoir si ton application genere des retours d'erreur recuperables 2> ou pour la solution d'appel au shell (! en ftp) si elle est prevue....
 
si avec ces trois solutions tu en trouves pas une qui marche avec ton application tu peux la jetter c'est qu'elle ne respecte aucun standard unix .....donc poubelle.


Message édité par francoisp le 15-07-2004 à 14:49:43

---------------
If everything else failed then read the instructions
Reply

Marsh Posté le 15-07-2004 à 15:17:35    

avec le programme que j'utilise ! ne fonctionne pas, il essaye d'interpreter aussi :/
 
si je redirige toute les sorties vers un fichier ex:
monprog >log.txt <<FIN
(1)
commande1
(2)
commande2
(3)
FIN
 
alors il faudrai que je puisse lire le fichier en (1)puis en (2)et en (3) , donc que mes commandes de lecture ne soient pas redirigées vers mon programme :/
 
 
:cry:

Reply

Marsh Posté le 15-07-2004 à 15:17:42    

heu le coup du ! pour interpréter du shell, c'est pas forcément un standard :o
 
essaye plutôt du côté de python (ou C) pour pouvoir gérer plus finement le flux du process que tu lances ...

Reply

Marsh Posté le 15-07-2004 à 15:28:50    

ok merci, je vais essayer de ce coté ...

Reply

Marsh Posté le 15-07-2004 à 15:41:05    

expect est ton ami.

Reply

Marsh Posté le 15-07-2004 à 16:05:51    

c'est quoi expect ?
 
sinon je voudrai bien essayer en perl, mais j'ai aucune idée de comment orienté mes recherches :/
j'ai essayé comme avec le bash de chercher des scripts ftp, mais en perl ils utilisent une librairie spécifique .. et non le programme ftp+envoi des commmandes :S
 
sinon l'autre solution c'est de créer un programme (sous windows) qui se conecte en ssh et qui envoi et reçoit les commandes :S

Reply

Marsh Posté le 15-07-2004 à 16:32:41    

pkoi sous windows ?
en python ou perl sous linux, tu lances ton prog dans un process, et tu fait ce que tu veux des entrées-sorties :)

Reply

Marsh Posté le 15-07-2004 à 16:32:41   

Reply

Marsh Posté le 15-07-2004 à 17:02:57    

je disais sous windows car l'utlisateur final est sous windows :) et donc si j'avai une petite classe qui gere le ssh, je pourais gérer facilement les entrées sorties avec le shell (mais bon c'est pas le pb ici)
 
pour l'instant je vais me concentrer sur un script qui va me permettre de passer les commandes :/

Reply

Marsh Posté le 15-07-2004 à 17:19:25    

bobuse a écrit :

heu le coup du ! pour interpréter du shell, c'est pas forcément un standard :o
 
essaye plutôt du côté de python (ou C) pour pouvoir gérer plus finement le flux du process que tu lances ...


 
j'ai jamais dit !=standard mais  
interpreter du shell dans des applis oui forcement que la syntaxe varie d'une applie à une autre !ne me fait pas dire ce que je ne dis pas !


---------------
If everything else failed then read the instructions
Reply

Marsh Posté le 15-07-2004 à 17:22:39    

Kytrix a écrit :

avec le programme que j'utilise ! ne fonctionne pas, il essaye d'interpreter aussi :/
 
si je redirige toute les sorties vers un fichier ex:
monprog >log.txt <<FIN
(1)
commande1
(2)
commande2
(3)
FIN
 
alors il faudrai que je puisse lire le fichier en (1)puis en (2)et en (3) , donc que mes commandes de lecture ne soient pas redirigées vers mon programme :/
 
 
:cry:


 
 
la syntaxe n'est pas forcement "!"
 
ensuite si la possibilité n'existe pas utilise le "tantque"...
 
si ça echoue aussi  
passe par le C ou python mais ça va etre lourd...
 
enfin assures toi aussi que c'est pas le fonctionnement normal de ton appli de lancer ses commandes internes à la volée... au cas où....
 
on sait jamais avec les applis prorio...


---------------
If everything else failed then read the instructions
Reply

Marsh Posté le 15-07-2004 à 17:33:09    

et en perl ? :)
 
ou je peux trouver de l'aide pour "gerer" une application console a partir d'un programme en c ?  
une idée des mots clés a chercher ? :)

Reply

Marsh Posté le 16-07-2004 à 06:06:34    

En perl y'au un module pour les pipes bidirectionels (j'ai lu en travers mais il me semble que c'est ce qu'il te faut).

Reply

Marsh Posté le 16-07-2004 à 09:40:58    

cherches sur des noms de fonctions comme sys() exec() ... je dis un peu au pif, mais si ça peut t'aider ...
 
En python : http://docs.python.org/lib/module-popen2.html

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed