Nb arguments envoyés à un shell via un navi

romegonic Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   -  
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   -
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 :-)

A voir également:

3 réponses

romegonic Messages postés 28 Date d'inscription   Statut Membre Dernière intervention  
 
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
Utilisateur anonyme
 
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   Statut Modérateur Dernière intervention   934
 
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