Petit parser PHP en shell
Résolu
Groarh
Messages postés
682
Date d'inscription
Statut
Membre
Dernière intervention
-
Groarh Messages postés 682 Date d'inscription Statut Membre Dernière intervention -
Groarh Messages postés 682 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
je travaille très souvent sur des postes de mon campus universitaire, où sont installés les distribs
openSUSE 10.3 et Gentoo (je sais plus quelle version).
Web developer las de devoir passer par le ftp pour vérifier chaque modification de script php, je me suis demandé s'il n'y avait pas moyen de faire plus simple. En fouillant un peu, je constate que sous les deux systèmes, je dispose de PHP mais pas d'Apache, et je n'ai pas de droits d'admin pour installer quoi que ce soit.
J'ai alors tenté de me faire un petit parser maison, en traitant un fichier php par un shell assez léger, pour obtenir un fichier htm correspondant. Problème : je m'y connais assez peu en shell... L'idée de base c'est :
Ce que j'aimerais, c'est :
- d'une part, générer un .htm avec le même nom que le .php ;
- d'autre part, si c'est pas trop lourd à mettre en oeuvre, pouvoir lancer le parser en balançant le script dessus par glisser/déposer (simple question de confort, mais le but c'est aussi que j'apprenne en shell ^^)
Toute idée, je suis preneur, exprimez-vous ! ;)
je travaille très souvent sur des postes de mon campus universitaire, où sont installés les distribs
openSUSE 10.3 et Gentoo (je sais plus quelle version).
Web developer las de devoir passer par le ftp pour vérifier chaque modification de script php, je me suis demandé s'il n'y avait pas moyen de faire plus simple. En fouillant un peu, je constate que sous les deux systèmes, je dispose de PHP mais pas d'Apache, et je n'ai pas de droits d'admin pour installer quoi que ce soit.
J'ai alors tenté de me faire un petit parser maison, en traitant un fichier php par un shell assez léger, pour obtenir un fichier htm correspondant. Problème : je m'y connais assez peu en shell... L'idée de base c'est :
php -f fichier.php > fichier.htm
Ce que j'aimerais, c'est :
- d'une part, générer un .htm avec le même nom que le .php ;
- d'autre part, si c'est pas trop lourd à mettre en oeuvre, pouvoir lancer le parser en balançant le script dessus par glisser/déposer (simple question de confort, mais le but c'est aussi que j'apprenne en shell ^^)
Toute idée, je suis preneur, exprimez-vous ! ;)
A voir également:
- Petit parser PHP en shell
- Classic shell - Télécharger - Personnalisation
- Easy php - Télécharger - Divers Web & Internet
- Petit 2 ✓ - Forum Bureautique
- Comment imprimer une photo en petit - Forum Photo numérique
- Trier du plus petit au plus grand excel - Guide
10 réponses
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. ;)
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$;-))
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
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
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".
;-))
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
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…
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.
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.