Paramètres interprétés

Paramètres interprétés - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 15-12-2004 à 15:34:28    

Hello
 
Dans un script shell unix, comment faire pour récupérer un paramètre avec des jokers sans l'interpréter ? :??:
 
Pour simplifier voici script.sh :
find . -name $1
 
 
En lançant script.sh *.sav
 
je veux avoir ce résultat :
./fich1.sav
./sous_rep/fich2.sav

 
Mais je n'obtiens que :
./fich1.sav
 
Je pense que cela vient du fait que $1 est interprété dans le répertoire courant est remplacé par fich1.sav. Du coup le script fait juste un find . -name fich1.sav  :sweat:

Reply

Marsh Posté le 15-12-2004 à 15:34:28   

Reply

Marsh Posté le 15-12-2004 à 15:44:16    

En échappant les caractères spéciaux au niveau de l'appel ça marche :
script.sh \*.sav  
 
mais ce n'est pas satisfaisant comme réponse, vu que c'est l'utilisateur qui doit gérer le problème.  :(

Reply

Marsh Posté le 15-12-2004 à 16:33:52    

find . -name "$1"  
 
 
cela marche ?


---------------
Mandriva : parce que nous le valons bien ! http://linux-wizard.net/index.php
Reply

Marsh Posté le 15-12-2004 à 16:44:04    

Dark_Schneider a écrit :

find . -name "$1"  
 
 
cela marche ?


 
Non, ça fait pareil.
 
Apparemment il n'y a pas d'autre moyen que de faire le traitement au niveau du passage de paramètres ( soit "*.sav", soit \*.sav ) mais pas à l'intérieur du script.

Reply

Marsh Posté le 15-12-2004 à 23:44:54    

Tu n'as pas compris ce qui se passe quand tu fais "script.sh *.sav". Le "*.sav" est interprete par ton shell, qui fait un "filename expansion". Donc il remplace *.sav par la liste de tous les fichiers qui matchent ce pattern, puis il lance script.sh avec en argument cette liste. script.sh ne voit jamais "*.sav".
 
C'est un peu pareil que les gens qui font "ls *". Ca revient a lancer ls avec en argument la liste des fichiers du repertoire courant, ce qui est idiot. Autant faire "echo *".
 
Quand tu fais "script.sh \*.sav", tu echappes les "*". Ca empeche le shell de l'interpreter. Donc dans ce cas il appelle script.sh avec en agument "*.sav". Tu peux aussi faire ./script.sh "*.nav" ou ./script.sh '*.nav'.

Reply

Marsh Posté le 15-12-2004 à 23:49:15    

matafan a écrit :

Tu n'as pas compris ce qui se passe quand tu fais "script.sh *.sav". Le "*.sav" est interprete par ton shell, qui fait un "filename expansion". Donc il remplace *.sav par la liste de tous les fichiers qui matchent ce pattern, puis il lance script.sh avec en argument cette liste. script.sh ne voit jamais "*.sav".
 
C'est un peu pareil que les gens qui font "ls *". Ca revient a lancer ls avec en argument la liste des fichiers du repertoire courant, ce qui est idiot. Autant faire "echo *".
 
Quand tu fais "script.sh \*.sav", tu echappes les "*". Ca empeche le shell de l'interpreter. Donc dans ce cas il appelle script.sh avec en agument "*.sav". Tu peux aussi faire ./script.sh "*.nav" ou ./script.sh '*.nav'.


 
 :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed