GNT sans publicité, site mobile, fonctionnalitées exclusives...

Empêcher l'expansion de *

Le
Vincent Verdon
Bonjour à tous,

j'ai un script bash qui est appelé avec un argument qui peut être "*".

Je ne parviens pas à empêcher l'expansion de l'argument quand il s'agit
du symbole *.
Y-a-t-il une solution ? Je cherche sans trouver :-(

Amicalement, Vincent Verdon
Lire les 11 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 3
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Gilles
Le #22871491
Ref:
j'ai un script bash qui est appelé avec un argument qui peut être "*".

Je ne parviens pas à empêcher l'expansion de l'argument quand il s'agit
du symbole *.
Y-a-t-il une solution ? Je cherche sans trouver :-(




Ben, suffit de protéger l'argument entre simples ou doubles quotes (" ou ') lors
de l'appel, tout simplement (ou alors je n'ai pas bien compris la question...)
--
Gilles
Benoit Izac
Le #22871741
Bonjour,

le 01/12/2010 à 20:52, Vincent Verdon a écrit dans le message

j'ai un script bash qui est appelé avec un argument qui peut être "*".

Je ne parviens pas à empêcher l'expansion de l'argument quand il
s'agit du symbole *.



set -f

--
Benoit Izac
Vincent Verdon
Le #22872031
Bonsoir,

Le 01/12/2010 21:16, Benoit Izac a écrit :
Bonjour,

le 01/12/2010 à 20:52, Vincent Verdon a écrit dans le message

j'ai un script bash qui est appelé avec un argument qui peut être "*".

Je ne parviens pas à empêcher l'expansion de l'argument quand il
s'agit du symbole *.



set -f




Hélas non, j'ai déjà essayé.

Un exemple :
#!/bin/bash
set -f
OP=$1
echo "parametre = $1"

Si je passe en paramètre du script *, cela renvoie le nom du premier
fichier rencontré dans le rep courant.
Si je veux récupérer *, je dois passer '*' en paramètre.

J'imagine que Bash commence son travail d'expansion dès la lecture du
script : il fait l'expansion de * et place le résultat dans $1, avant de
prendre en compte set -f.

Merci de la réponse.

Amicalement, Vincent Verdon
Benoit Izac
Le #22872081
Bonjour,

le 01/12/2010 à 22:15, Vincent Verdon a écrit dans le message

j'ai un script bash qui est appelé avec un argument qui peut être "*".

Je ne parviens pas à empêcher l'expansion de l'argument quand il
s'agit du symbole *.



set -f




Hélas non, j'ai déjà essayé.

Un exemple :
#!/bin/bash
set -f
OP=$1
echo "parametre = $1"

Si je passe en paramètre du script *, cela renvoie le nom du premier
fichier rencontré dans le rep courant.
Si je veux récupérer *, je dois passer '*' en paramètre.

J'imagine que Bash commence son travail d'expansion dès la lecture du
script : il fait l'expansion de * et place le résultat dans $1, avant
de prendre en compte set -f.



C'est exactement ça, c'est le shell qui appelle le script qui fait
l'expansion. Donc soit tu fais un « set -f » dans ton shell courant,
soit tu échappes * : sh script.sh *

--
Benoit Izac
Éric Lévénez
Le #22872071
Le 01/12/10 22:15, Vincent Verdon a écrit :

Si je passe en paramètre du script *, cela renvoie le nom du premier
fichier rencontré dans le rep courant.
Si je veux récupérer *, je dois passer '*' en paramètre.



Sous Windows, c'est les commandes qui traitent les arguments, mais sous
Unix, c'est le shell qui fait ce travail. Ainsi le * sera interprété par
le shell comme la liste des fichiers du répertoire courant (si la liste
n'est pas trop longue), puis le shell script sera appelé avec cette
liste, et donc plus de *. Le cas où * est passé tel-quel est le cas où
il n'y a pas de fichier dans le répertoire courant (en ignorant ceux qui
sont cachés).

Exemple :avec "echo" à la place du shell

mkdir a && cd a && echo * && touch b c && echo * && rm b c && cd .. &&
rmdir a
*
b c


--
Éric Lévénez -- Unix is not only an OS, it's a way of life.
Publicité
Suivre les réponses
Poster une réponse
Anonyme