Petit parser PHP en shell
Résolu/Fermé
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
-
11 oct. 2008 à 00:22
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 - 21 sept. 2009 à 14:15
Groarh Messages postés 682 Date d'inscription vendredi 1 août 2008 Statut Membre Dernière intervention 28 juin 2015 - 21 sept. 2009 à 14:15
A voir également:
- Petit parser PHP en shell
- Classic shell windows 11 - Télécharger - Personnalisation
- Easy php - Télécharger - Divers Web & Internet
- Petit 1 comme ² ✓ - Forum Windows
- Excel trier du plus grand au plus petit - Guide
- Petit 3 ✓ - Forum Word
10 réponses
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
13 oct. 2008 à 13:44
13 oct. 2008 à 13:44
Bonjour,
en attendant une réponse ici, je continue mes recherches. Je posterai si j'ai des éléments de solution, afin que ça serve à d'autres. ;)
en attendant une réponse ici, je continue mes recherches. Je posterai si j'ai des éléments de solution, afin que ça serve à d'autres. ;)
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
21 sept. 2009 à 09:47
21 sept. 2009 à 09:47
Salut,
Alors on va commencer par éviter le la création d'une variable (${tmp}) et remplacer les quotes inverses (qui ne sont plus utilisées et pas très lisibles) par la syntaxe adéquate ( $(commande) ):
Ensuite, pour ton histoire d'effacer le fichier qu'une fois le programme s'est terminé, il faut utiliser la commande "wait", mais auparavant il faut lancer firefox en arrière-plan (ceci se fait grâce à esperluette "&") et faire une pause avec la commande "wait" qui attend patiemment que le dernier "job" lancé en arrière-plan se termine pour continuer l'exécution des commandes suivantes :
PS. Fait un test avant pour la transformation de la variable :
Alors on va commencer par éviter le la création d'une variable (${tmp}) et remplacer les quotes inverses (qui ne sont plus utilisées et pas très lisibles) par la syntaxe adéquate ( $(commande) ):
if [ -f $1 ] then php -f $1 > ${1/\.*/.html} firefox file://$(pwd)/${1/\.*/.html} else echo "$1 introuvable" fi
Ensuite, pour ton histoire d'effacer le fichier qu'une fois le programme s'est terminé, il faut utiliser la commande "wait", mais auparavant il faut lancer firefox en arrière-plan (ceci se fait grâce à esperluette "&") et faire une pause avec la commande "wait" qui attend patiemment que le dernier "job" lancé en arrière-plan se termine pour continuer l'exécution des commandes suivantes :
if [ -f $1 ] then php -f $1 > ${1/\.*/.html} firefox file://$(pwd)/${1/\.*/.html} & wait rm -f /$(pwd)/${1/\.*/.html} else echo "$1 introuvable" fi;-))
PS. Fait un test avant pour la transformation de la variable :
jp@MDK:~/tmpfs ssh$ echo ${1} essai.php jp@MDK:~/tmpfs ssh$ echo ${1/\.*/.html} essai.html jp@MDK:~/tmpfs ssh$ echo $(pwd)/${1} /home/jp/tmpfs/essai.php jp@MDK:~/tmpfs ssh$ echo $(pwd)/${1/\.*/.html} /home/jp/tmpfs/essai.html jp@MDK:~/tmpfs ssh$;-))
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
21 sept. 2009 à 09:16
21 sept. 2009 à 09:16
Hello !
Après presque un an (déjà !), je remonte ce vieux topic avec une question qui s’inscrit dans la continuité. Commençons par présenter l’aspect actuel du script, qui a bénéficié de mes progrets en bash :
Je dispose en outre d’un script de nettoyage assez primitif :
Ce qui nous amène à ma question :
si j’appelle rm directement dans le script « miniparser », après firefox, celui-ci n’a pas le temps de lire le fichier temporaire. Je me demande donc s’il faut utiliser un délai, ou si je peux dire à l’interpréteur quelque chose du genre :
« attends que Firefox ait fini de lire ce fichier avant d’éxécuter la commande suivante ».
Merci aux âmes charitables qui me répondront :P
Après presque un an (déjà !), je remonte ce vieux topic avec une question qui s’inscrit dans la continuité. Commençons par présenter l’aspect actuel du script, qui a bénéficié de mes progrets en bash :
#! /bin/bash # miniparser if [ -f $1 ] then str=`basename $1` tmp=${str%%.php*}.htm php -f $1 > $tmp firefox file://`pwd`/$tmp else echo "$1 introuvable" fi
Je dispose en outre d’un script de nettoyage assez primitif :
#! /bin/bash # cleanup rm -f *.htm
Ce qui nous amène à ma question :
si j’appelle rm directement dans le script « miniparser », après firefox, celui-ci n’a pas le temps de lire le fichier temporaire. Je me demande donc s’il faut utiliser un délai, ou si je peux dire à l’interpréteur quelque chose du genre :
« attends que Firefox ait fini de lire ce fichier avant d’éxécuter la commande suivante ».
Merci aux âmes charitables qui me répondront :P
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
21 sept. 2009 à 10:10
21 sept. 2009 à 10:10
Salut,
la grande classe, merci jipicy ;)
La syntaxe $(commande) existe aussi en shell simple (/bin/sh) ? Sinon, ça explique pourquoi je suis passé à côté…
Peux-tu m’en dire plus sur la manip ${var/regexp/} ?
Et encore une question, ne vaut-il pas mieux utiliser une variable temporaire plutôt que faire appel trois fois à une regexp ?
la grande classe, merci jipicy ;)
La syntaxe $(commande) existe aussi en shell simple (/bin/sh) ? Sinon, ça explique pourquoi je suis passé à côté…
Peux-tu m’en dire plus sur la manip ${var/regexp/} ?
Et encore une question, ne vaut-il pas mieux utiliser une variable temporaire plutôt que faire appel trois fois à une regexp ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
21 sept. 2009 à 10:35
21 sept. 2009 à 10:35
Re-
Oui la syntaxe existe aussi pour le "shell sh", qui sur beaucoup de distribution récente est en fait le shell "bash" (/bin/sh/ est bien souvent un lien symbolique pointant sur /bin/bash) :
Sinon, concernant la "regex", ce n'est pas gênant dans la mesure où c'est à défaut de regex plutôt une implémentation naturelle dans le shell...
Voir à ce sujet le man bash et plus particulièrement le la partie "Remplacement des paramètres".
;-))
Oui la syntaxe existe aussi pour le "shell sh", qui sur beaucoup de distribution récente est en fait le shell "bash" (/bin/sh/ est bien souvent un lien symbolique pointant sur /bin/bash) :
jp@MDK:~/tmpfs ssh$ ls -l /bin/sh lrwxrwxrwx 1 root root 4 déc 15 2005 /bin/sh -> bash* jp@MDK:~/tmpfs ssh$
Sinon, concernant la "regex", ce n'est pas gênant dans la mesure où c'est à défaut de regex plutôt une implémentation naturelle dans le shell...
Voir à ce sujet le man bash et plus particulièrement le la partie "Remplacement des paramètres".
;-))
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
21 sept. 2009 à 13:51
21 sept. 2009 à 13:51
Ok merci ;)
Voici ma version, j’utilise quand même une variable temporaire pour alléger le code :
Voici ma version, j’utilise quand même une variable temporaire pour alléger le code :
#! /bin/bash if [ -f $1 ] then tmp=$(basename ${1/\.php*/.htm}) php -f $1 > $tmp firefox file://$(pwd)/$tmp & wait rm -f $tmp else echo "$1 introuvable" fi
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 897
21 sept. 2009 à 14:06
21 sept. 2009 à 14:06
Tu aurais pu tout aussi bien :
#! /bin/bash if [ -f $1 ] then html="${1/\.*/.html}" php -f $1 > ${html} firefox file://$(pwd)/${html} & wait rm -f /$(pwd)/${html} else echo "$1 introuvable" fi
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
21 sept. 2009 à 14:15
21 sept. 2009 à 14:15
Ok, mais ça me paraît logique de poser le fichier temporaire dans le working dir. Si jamais il y a un crash avant le rm, je le retrouverai plus facilement…
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
13 oct. 2008 à 14:58
13 oct. 2008 à 14:58
Premiers éléments de réponse.
Après avoir créé le fichier shell miniparser.sh, je l'ai rendu exécutable avec la commande
Reste à régler :
- le nom de fichier variable ;
- le passage du fichier en argument.
( M'est avis que ces deux problèmes n'en sont qu'un seul en réalité... )
- J'ai essayé d'utiliser un pipelining pour passer directement le résultat à Firefox, mais ça ne marche pas, je ne suis pas au point sur la syntaxe.
Je continue à chercher.
Après avoir créé le fichier shell miniparser.sh, je l'ai rendu exécutable avec la commande
chmod +x miniparser.shEnsuite, je l'ai édité :
php -f index.php > index.parsed.htm firefox index.parsed.htm exit
Reste à régler :
- le nom de fichier variable ;
- le passage du fichier en argument.
( M'est avis que ces deux problèmes n'en sont qu'un seul en réalité... )
- J'ai essayé d'utiliser un pipelining pour passer directement le résultat à Firefox, mais ça ne marche pas, je ne suis pas au point sur la syntaxe.
# code qui ne marche pas # php -f index.php | firefoxSi vous avez une idée...
Je continue à chercher.
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
13 oct. 2008 à 16:25
13 oct. 2008 à 16:25
Solution pour le pipelining, après des heures de lecture (Google n'a pas été très amical cette fois-ci, mais j'ai fini par trouver par hasard sur wikipédia) :
Et finalement, la solution du passage de paramètre avec la variable $1, trouvée sur le site d'un IUT de Paris, répond à presque toutes les autres questions :
Je laisse tomber pour le glisser-déposer, c'est une vieille habitude prise sous Windows, mais apparemment Gnome n'est pas aussi tolérant : si tu ne poses pas sur un dossier, il ne veut rien entendre.
Le topic est donc résolu, je remercie tous ceux qui m'ont apporté leur aidé précieuse :D
Bonne soirée à tous.
firefox `php -f index.php`
Et finalement, la solution du passage de paramètre avec la variable $1, trouvée sur le site d'un IUT de Paris, répond à presque toutes les autres questions :
#!/bin/bash if test -f $1 then firefox `php -f $1` else echo "$1 : fichier introuvable" fiÇa marche à merveille, sauf que... sous OpenSUSE, je me suis rendu compte que php n'était pas installé. Damn it, fuck'n administrateur réseau à la noix !!
Je laisse tomber pour le glisser-déposer, c'est une vieille habitude prise sous Windows, mais apparemment Gnome n'est pas aussi tolérant : si tu ne poses pas sur un dossier, il ne veut rien entendre.
Le topic est donc résolu, je remercie tous ceux qui m'ont apporté leur aidé précieuse :D
Bonne soirée à tous.
Groarh
Messages postés
682
Date d'inscription
vendredi 1 août 2008
Statut
Membre
Dernière intervention
28 juin 2015
185
13 oct. 2008 à 18:41
13 oct. 2008 à 18:41
Rhaa non, c'est faux, c'est complètement faux ce que j'ai écrit !! Et plus moyen d'éditer !
Je ne peux pas passer le contenu d'un fichier à Firefox, je dois lui passer son nom !
Je ne peux pas passer le contenu d'un fichier à Firefox, je dois lui passer son nom !
#!/bin/bash if test -f $1 then php -f $1 > "$1.htm" firefox "$1.htm" else echo "$1 : fichier introuvable" fi