#1 Le 22/05/2016, à 12:57
- sny75
interraction avec un script shell
Bonjour,
Je dois faire appel à un script PHP via un script shell (pour ne pas répéter l'opération manuellement plusieurs fois).
J'ai donc ce script sh :
for i in "1 2 3"; do
php /apps/user/www/public/index.php script \$i
done
Le problème c'est que pour chaque "$i", je dois entrer une confirmation pour que le script PHP réalise l'opération.
J'ai tenté avec expect mais couplé au shell ca n'a pas l'air de marché.
En gros lorsque le script PHP s’exécute, j'ai un message de confirmation et c'est à ce moment là qu'il faut envoyer "yes".
Merci de votre aide:)
Dernière modification par sny75 (Le 22/05/2016, à 13:00)
Hors ligne
#2 Le 22/05/2016, à 13:28
- Shanx
Re : interraction avec un script shell
Salut,
à tester :
echo yes | php /apps/user/www/public/index.php script \$i
Ou alors :
php /apps/user/www/public/index.php script \$i << EOF
yes
EOF
Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied
Hors ligne
#3 Le 22/05/2016, à 13:36
- sny75
Re : interraction avec un script shell
Merci mais ca ne fonctionne pas.
J'ai toujours un message qui demande la confirmation.
Hors ligne
#4 Le 22/05/2016, à 14:32
- claudius01
Re : interraction avec un script shell
Bonjour,
Une proposition peut-être idiote: Comme il semble que tu sois en local, ne peux-tu pas modifier le script php ?;-)
Hors ligne
#5 Le 22/05/2016, à 14:33
- sny75
Re : interraction avec un script shell
Non ce n'est pas mon application WEB.
Hors ligne
#6 Le 22/05/2016, à 14:58
- claudius01
Re : interraction avec un script shell
Ok, est-il possible alors de connaître comment est implémenté ce "yes" de confirmation dans le ou les scripts php ?
Hors ligne
#7 Le 22/05/2016, à 15:05
- sny75
Re : interraction avec un script shell
Le problème c'est que je ne trouve pas le bout de code : php /apps/user/www/public/index.php script
Je ne sais pas où chercher.
Hors ligne
#8 Le 22/05/2016, à 15:09
- Shanx
Re : interraction avec un script shell
Je dirais qu'il est probablement dans /apps/user/www/public/index.php
Pour le voir :
cat /apps/user/www/public/index.php
Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied
Hors ligne
#9 Le 22/05/2016, à 15:11
- sny75
Re : interraction avec un script shell
Voilà le message lorsque j’exécute le script :
capture
Dernière modification par sny75 (Le 22/05/2016, à 15:15)
Hors ligne
#10 Le 22/05/2016, à 15:15
- sny75
Re : interraction avec un script shell
Je dirais qu'il est probablement dans /apps/user/www/public/index.php
Pour le voir :
cat /apps/user/www/public/index.php
Je ne vois pas grand chose dans cette page, je précise que Zend est utilisé.
Hors ligne
#11 Le 22/05/2016, à 15:37
- claudius01
Re : interraction avec un script shell
Peut-être qu'en recherchant dans le projet des termes comme "Please confirm that you..." et/ou "CONFIRM_DELETE", tu localiseras l'endroit où agir ... Je commence à comprendre pourquoi la commande "yes" de bash est inopérante ;-)
Hors ligne
#12 Le 22/05/2016, à 15:45
- sny75
Re : interraction avec un script shell
Mais non j'ai mis YES sur le forum, j'ai fait le remplacement dans mon script ne t'inquiètes pas:)
Peux-tu m'aider sur la commande stp ?
Hors ligne
#13 Le 22/05/2016, à 15:46
- Shanx
Re : interraction avec un script shell
sny75, tu avais bien remplacé mon "yes" par "CONFIRM_DELETE", n'est-ce pas ?
Mes randos : grande traversées des Alpes, de l'Islande, de la Corse, du Japon (en vélo), etc.
Traversée des États-Unis à pied
Hors ligne
#14 Le 22/05/2016, à 15:47
- sny75
Re : interraction avec un script shell
oui!
Hors ligne
#15 Le 22/05/2016, à 15:50
- sny75
Re : interraction avec un script shell
Il est impossible d'envoyer automatiquement "CONFIRM_DELETE" donc ?
Hors ligne
#16 Le 22/05/2016, à 16:52
- claudius01
Re : interraction avec un script shell
Le problème c'est que je ne trouve pas le bout de code : php /apps/user/www/public/index.php script
Je ne sais pas où chercher.Shanx a écrit :sny75, tu avais bien remplacé mon "yes" par "CONFIRM_DELETE", n'est-ce pas ?
sny75 a écrit :oui!
Mais non j'ai mis YES sur le forum, j'ai fait le remplacement dans mon script ne t'inquiètes pas
Il est impossible d'envoyer automatiquement "CONFIRM_DELETE" donc ?
Désolé, mais j'ai du mal à suivre ce dialogue qui déroute mon esprit cartésien ;-)
Hors ligne
#17 Le 22/05/2016, à 17:13
- sny75
Re : interraction avec un script shell
Je recommence :
Je dois faire appel à un script PHP depuis un script bash (afin d'automatiser la commande pour plusieurs ID)
for i in "1 2 3"; do
php /apps/user/www/public/index.php script \$i
done
La commande se lance mais demande une confirmation (CONFIRM_DELETE) :
http://www.hostingpics.net/viewer.php?i … apture.png
Je veux donc envoyer "CONFIRM_DELETE" pour chaque exécution du script PHP
Hors ligne
#18 Le 22/05/2016, à 17:18
- Watael
Re : interraction avec un script shell
J'ai tenté avec expect mais couplé au shell ca n'a pas l'air de marché.
ok, donc, « ça marche pas » , mais qu'est-ce qui ne marche pas ? qu'as-tu essayé ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#19 Le 22/05/2016, à 17:26
- sny75
Re : interraction avec un script shell
J'ai tenté
php /apps/user/www/public/index.php script \$i
send "CONFIRM_DELETE"
J'ai bien sur fait les déclarations en début de fichiers (expect et bash).
Hors ligne
#20 Le 22/05/2016, à 17:54
- Watael
Re : interraction avec un script shell
J'ai bien sur fait les déclarations en début de fichiers (expect et bash).
oula !
qu'appelles-tu "déclarations" ?
expect et bash sont deux programmes différents, tu ne peux évidemment pas "mixer" les commandes de ces deux prorgammes pour faire un script.
de manière approximative (tu devras faire des recherches pour que ça fonctionne), le script expect devrait ressembler à ça :
#!/usr/bin/expect
spawn '/chemin/tonScript argument'
expect 'message envoyé par le programme'
send 'message attendu par le programme'
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#21 Le 22/05/2016, à 18:02
- sny75
Re : interraction avec un script shell
J'ai plusieurs messages d'erreur (spawn not found, send not found ...).
Je fait l'appel de la manière suivante à mon script sh:
sudo -u user sh test.sh
La commande PHP je la met après "spawn".
Hors ligne
#22 Le 22/05/2016, à 18:38
- sny75
Re : interraction avec un script shell
Tout se lance maintenant.
#!/usr/bin/expect
spawn php /apps/user/www/public/index.php script 420
expect "command."
send "CONFIRM_DELETE"
Parcontre la confirmation n'est pas prise en compte!
Hors ligne
#23 Le 22/05/2016, à 19:01
- Watael
Re : interraction avec un script shell
expect 'message EXACT envoyé par le programme'
or, le programme n'affiche, selon l'image postée, pas "command.", mais
une_date une_heure: un_message...
donc, il faut, puisque la date et l'heure varient, appeler la commande expect avec l'option -re pour pouvoir utiliser une regex qui éludera la problématique de variation de date/heure.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#24 Le 22/05/2016, à 19:11
- sny75
Re : interraction avec un script shell
C'est pas censé fonctionné ? :
expect "*?command."
La fin se termine toujours par command.
Dernière modification par sny75 (Le 22/05/2016, à 19:23)
Hors ligne
#25 Le 22/05/2016, à 19:32
- claudius01
Re : interraction avec un script shell
Avant de synchroniser avec "expect", tu peux mettre un "set timeout 30" (durée à définir @ aux dates/heures de la trace).
Cela permettra de lever le doute entre ce qui est attendu et ce qui doit être émis...
Cf. 2. Timeout On Expect String
Hors ligne