Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[script][bash] passer des arguments du type "toto titi"

6 réponses
Avatar
Thomas Harding
Le script suivant ne marche pas si on lui passe en argument "toto titi"
J'ai bien essayé de quoter : ...'$(echo $1 | sed -e 's/ /\\ /g')'...,
mais cela ne marche plus ni pour "toto titi" ni pour "toto"

Bref, si quelqu'un a la solution...

#!/bin/bash
i=0
until [ -z "$1" ]
do
case $1 in
-*) OPTS[$i]= "$1" ; (( i += 1 )) ; shift ;;
*) OPTS[$i]="-name $(echo $1 | sed -e 's/ /\\ /g')"
(( i += 1 )); shift ;;
esac
done
echo ${OPTS[@]}
find . ${OPTS[@]}

--
Thomas Harding

--
Pour contacter l'équipe de modération : moderateurs-fcolm@efrei.fr
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.

6 réponses

Avatar
Thomas Harding
Dans l'article , Thomas Harding a écrit :
Le script suivant ne marche pas si on lui passe en argument "toto titi"



Bref, si quelqu'un a la solution...



#!/bin/bash
i=0
until [ -z "$1" ]
do
case $1 in
-*) OPTS[$i]= "$1" ; (( i += 1 )) ; shift ;;
*) OPTS[$i]="-name$(echo $1 | sed -e 's/ / /g')"
(( i += 1 )); shift ;;
esac
done
echo ${OPTS[@]}
IFS=''
find . ${OPTS[@]}


--
Thomas Harding

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Thomas Harding
Dans l'article , Thomas Harding a écrit :
Dans l'article , Thomas Harding a écrit :
Le script suivant ne marche pas si on lui passe en argument "toto titi"



Bref, si quelqu'un a la solution...



#!/bin/bash
i=0
until [ -z "$1" ]
do


OPTS[$i]= "$1" ; (( i += 1 )) ; shift
done
echo ${OPTS[@]}
IFS=''
find . ${OPTS[@]}




--
Thomas Harding

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Daniel Dechelotte
Thomas,

Thomas Harding a écrit :

Dans l'article , Thomas Harding a écrit :
> Dans l'article , Thomas Harding a écrit :
>> Le script suivant ne marche pas si on lui passe en argument "toto
>titi"


[...]

Que se passe-t-il ? Pourquoi plusieurs versions de ce script sans
commentaires ? Sont-ce des pistes qui n'aboutissent pas ? ou bien des
solutions auxquelles tu trouves a redire ?

Etant regulierement confronte a ce type de probleme, j'aimerais suivre
ce fil, mais je n'y comprends rien et je ne vois pas ce que je pourrais
reutiliser dans mes propres scripts.

--
Daniel Déchelotte
http://yo.dan.free.fr/

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Thomas Harding
Dans l'article ,
Daniel Dechelotte a écrit :
Que se passe-t-il ? Pourquoi plusieurs versions de ce script sans
commentaires ? Sont-ce des pistes qui n'aboutissent pas ? ou bien des
solutions auxquelles tu trouves a redire ?



La première solution était fausse, la deuxième était la bonne.

Etant regulierement confronte a ce type de probleme, j'aimerais suivre
ce fil, mais je n'y comprends rien et je ne vois pas ce que je pourrais
reutiliser dans mes propres scripts.



J'avoue que je commence à connaître par coeur la page man de bash, à
force de la consulter :)
Du coup, je pensais donner un exemple simple de ce que je voulais
faire...

Voici un exemple simple de la solution :

*******************
#!/bin/bash
IFS=''
macommande $@
IFS=' '
*******************

$ nom_script --option1 "Mon argument 1" --option2 "argument2"

éxécute :
macommande --option1 "Mon argument 1" --option2 "argument2"

(les guillemets sont fictifs, mais cela donne le résultat escompté).

J'ai fini par le découvrir dans le document

« Advanced Bash-Scripting Guide »

mon but était de créer un front-end à zophImport, qu'on peut télécharger
à l'adresse suivante :
<http://tom.harding.free.fr/chargephotos.php>
(le code est directement visible sur la page, ~ 250 lignes)

la première boucle qui extrait $@ est destinée à implémenter une option
"--help".

J'espère que cette fois ci je suis assez clair :)
--
Thomas Harding

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Thomas Harding
Dans l'article , Thomas Harding a écrit :
*******************
#!/bin/bash
IFS=''
macommande $@
IFS=' '
*******************



Et, naturellement, ça ne marche pas :/

Je vous livre la version « qui marche », c'est à dire qui passe à la
commande les arguments passés au script (je viens de le vérifier) :

#######################
i=0
IFS=''
until [ -z "$1" ]
do
case $1 in
-h|--help)
echo -e "usage :n$(basename $0) zophImport Options"
exit 0 ;;
-*) OPTS[$i]="$1" ; (( i += 1 )) ; shift ;;
*) OPTS[$i]=""$1"" ; (( i += 1 )) ; shift ;;
esac
done
IFS="
"
...etc

IFS=''
# la commande qui suit fait une seule ligne :
echo umask 0002 ; echo $MAIL ; zophImport ${OPTS[@]} --album "$ALBUM"
--category "$CATEGORY" $DATEDIR
--path $DIRECTORY ${PHOTOS_ROOT}/incoming/$i/* ;
rmdir ${PHOTOS_ROOT}/incoming/$i | at now + 1 minutes 2>/dev/null

IFS='
'
...etc
#####################


Si quelqu'un a une solution moins tirée par les cheveux, je suis
preneur...
--
Thomas Harding

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.
Avatar
Thomas Nemeth
Le jeu 28 jui 2005 à 20:29, Thomas Harding a tapoté :
| Dans l'article , Thomas Harding a écrit :
| > Dans l'article , Thomas Harding a écrit :
| >> Le script suivant ne marche pas si on lui passe en argument "toto titi"
| >
| >> Bref, si quelqu'un a la solution...
| >
| > #!/bin/bash
| > i=0
| > until [ -z "$1" ]
| > do
| OPTS[$i]= "$1" ; (( i += 1 )) ; shift
| > done
| > echo ${OPTS[@]}
| > IFS=''
| > find . ${OPTS[@]}

Je ne comprends pas trop le but...
Créer une ligne de commande pour find ?

find . $@
?


Thomas
--
BOFH excuse #152:
My pony-tail hit the on/off switch on the power strip.

--
Pour contacter l'équipe de modération :
ATTENTION: Postez DIRECTEMENT vos articles dans le groupe, PAS dans
la liste de distribution des modérateurs.