Nb arguments envoyés à un shell via un navi

Fermé
romegonic Messages postés 28 Date d'inscription lundi 26 juillet 2010 Statut Membre Dernière intervention 17 avril 2014 - 9 déc. 2011 à 12:47
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 - 9 déc. 2011 à 15:48
Bonjour,

J'ai un apache sur un serveur unix, qui execute des shells dans un repertoire cgi dédié.

Ces shells s'éxécutent parfaitement quand ils sont lancés à la main : ./monshell.sh
Et d'ailleurs ils retournent bien quand je leur demande, le nombre d'arguments ($#)

Or lors de l'appel via un navigateur, si j'envoie deux arguments à mon shell, ce navigateur ne transmet pas ces arguments de manière séparés, il considère qu'il n'y en a qu'un :

http://mon_serveur_web/rep_scripts_shell/monshell.sh?toto&tutu

Cela donne, si j'affiche le nombre d'arguments et les arguments eux-mêmes :

Nb_arg : 1
Arg_1 : toto&tutu

Donc en gros ce que je cherche c'est la synthaxe URL pour passer plus d'un argument, via un navigateur, vers un script shell (agissant en tant que cgi).

J'ai essayé diverses variantes avec des troncages de   en lui mettant un espace entre chaque argument dans l'url mais le navigateur transforme naturellement cela en %20

J'ai des solutions de contournement, par exemple en comptant les arguments dans mon shell, mais je souhaite récupérer cela en $# directement pour faire fonctionner les vérifications du nombre d'arguments passés, dès le début du script).

Bref, merci par avance pour l'aide apportée :-)

3 réponses

romegonic Messages postés 28 Date d'inscription lundi 26 juillet 2010 Statut Membre Dernière intervention 17 avril 2014
Modifié par romegonic le 9/12/2011 à 13:09
Précision : la solution du genre :

http://mon_serveur_web/rep_scripts_shell/monshell.sh?toto tutu

(avec un espace entre toto et tutu dans l'url passée au navigateur)

ne m'avance pas, car c'est une autre manière de passer les arguments (ce que je sais déjà faire) mais ne permet toujours pas de compter directement le nombre d'arguments passés, au sein du script.
0
salut,

si tu utilises bash, ajoute ceci avant de tester $#
set -- ${@//&/ }

sinon, il faut utiliser sed.
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
9 déc. 2011 à 15:48
Avec la méthode GET, utilise la variable $QUERY_STRING
Voir par exemple
http://www.ffnn.nl/pages/articles/linux/cgi-scripting-tips-for-bash-or-sh.php

Johan
0