Paramètres interprétés - Codes et scripts - Linux et OS Alternatifs
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.
Marsh Posté le 15-12-2004 à 16:33:52
find . -name "$1"
cela marche ?
Marsh Posté le 15-12-2004 à 16:44:04
Dark_Schneider a écrit : find . -name "$1" |
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.
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'.
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". |
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