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
Ref: <4cf6a6fc$0$27735$426a74cc@news.free.fr> de Vincent Verdon
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
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
Bonjour,
le 01/12/2010 à 20:52, Vincent Verdon a écrit dans le message <4cf6a6fc$0$27735$ :
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
Bonjour,
le 01/12/2010 à 20:52, Vincent Verdon a écrit dans le message
<4cf6a6fc$0$27735$426a74cc@news.free.fr> :
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 *.
le 01/12/2010 à 20:52, Vincent Verdon a écrit dans le message <4cf6a6fc$0$27735$ :
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
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 <4cf6a6fc$0$27735$ :
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
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
<4cf6a6fc$0$27735$426a74cc@news.free.fr> :
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.
le 01/12/2010 à 20:52, Vincent Verdon a écrit dans le message <4cf6a6fc$0$27735$ :
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
Bonjour,
le 01/12/2010 à 22:15, Vincent Verdon a écrit dans le message <4cf6ba8e$0$5223$ :
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
Bonjour,
le 01/12/2010 à 22:15, Vincent Verdon a écrit dans le message
<4cf6ba8e$0$5223$426a74cc@news.free.fr> :
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 *
le 01/12/2010 à 22:15, Vincent Verdon a écrit dans le message <4cf6ba8e$0$5223$ :
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 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 -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
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 -- <http://www.levenez.com/>
Unix is not only an OS, it's a way of life.
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 -- <http://www.levenez.com/> Unix is not only an OS, it's a way of life.
Nicolas George
Benoit Izac , dans le message , a écrit :
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.
Pourquoi commences-tu ton message par « c'est exactement ça » si tu le continues en disant exactement le contraire de ce qu'il a dit ?
Benoit Izac , dans le message <w537hft5gsp.fsf@izac.org>, a écrit :
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.
Pourquoi commences-tu ton message par « c'est exactement ça » si tu le
continues en disant exactement le contraire de ce qu'il a dit ?
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.
Pourquoi commences-tu ton message par « c'est exactement ça » si tu le continues en disant exactement le contraire de ce qu'il a dit ?
Benoit Izac
Bonjour,
le 01/12/2010 à 22:37, Nicolas George a écrit dans le message <4cf6c021$0$7650$ :
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.
Pourquoi commences-tu ton message par « c'est exactement ça » si tu le continues en disant exactement le contraire de ce qu'il a dit ?
Sans doute parce que j'ai lu trop vite et j'ai compris : bash (celui qui appelle le script) commence son travail d'expansion dès la lecture du script : ...
-- Benoit Izac
Bonjour,
le 01/12/2010 à 22:37, Nicolas George a écrit dans le message
<4cf6c021$0$7650$426a34cc@news.free.fr> :
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.
Pourquoi commences-tu ton message par « c'est exactement ça » si tu le
continues en disant exactement le contraire de ce qu'il a dit ?
Sans doute parce que j'ai lu trop vite et j'ai compris :
bash (celui qui appelle le script) commence son travail d'expansion dès
la lecture du script : ...
le 01/12/2010 à 22:37, Nicolas George a écrit dans le message <4cf6c021$0$7650$ :
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.
Pourquoi commences-tu ton message par « c'est exactement ça » si tu le continues en disant exactement le contraire de ce qu'il a dit ?
Sans doute parce que j'ai lu trop vite et j'ai compris : bash (celui qui appelle le script) commence son travail d'expansion dès la lecture du script : ...
-- Benoit Izac
Vincent Verdon
Bonsoir,
Le 01/12/2010 22:27, Éric Lévénez a écrit :
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
Evidemment, et, en plus je le savais...
Merci à tous pour vos explications.
-- Amicalement, Vincent Verdon
Bonsoir,
Le 01/12/2010 22:27, Éric Lévénez a écrit :
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
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
Evidemment, et, en plus je le savais...
Merci à tous pour vos explications.
-- Amicalement, Vincent Verdon
Stephane CHAZELAS
2010-12-01, 21:00(+01), Gilles:
Ref: <4cf6a6fc$0$27735$ de Vincent Verdon
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...)
Si le shell courant est zsh, on peut faire:
alias script.bash='noglob script.bash'
Alors, zsh n'"expand" pas les globbing patterns pour l'appel des commandes script.bash.
C'est util par exemple dans:
alias wmv='noglob zmv -W'
Avec ça, tu peux faire:
wmv *.xml *.html
par exemple
-- Stephane
2010-12-01, 21:00(+01), Gilles:
Ref: <4cf6a6fc$0$27735$426a74cc@news.free.fr> de Vincent Verdon
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...)
Si le shell courant est zsh, on peut faire:
alias script.bash='noglob script.bash'
Alors, zsh n'"expand" pas les globbing patterns pour l'appel des
commandes script.bash.
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...)
Si le shell courant est zsh, on peut faire:
alias script.bash='noglob script.bash'
Alors, zsh n'"expand" pas les globbing patterns pour l'appel des commandes script.bash.
C'est util par exemple dans:
alias wmv='noglob zmv -W'
Avec ça, tu peux faire:
wmv *.xml *.html
par exemple
-- Stephane
Lucas Levrel
Le 2 décembre 2010, Stephane CHAZELAS a écrit :
Si le shell courant est zsh, on peut faire:
alias script.bash='noglob script.bash'
Alors, zsh n'"expand" pas les globbing patterns pour l'appel des commandes script.bash.
Est-ce qu'on peut faire la même chose avec bash, ou dois-je créer un script du type : --- #!/bin/bash set -f mmv "$@" --- ?
Merci. -- LL
Le 2 décembre 2010, Stephane CHAZELAS a écrit :
Si le shell courant est zsh, on peut faire:
alias script.bash='noglob script.bash'
Alors, zsh n'"expand" pas les globbing patterns pour l'appel des
commandes script.bash.
Est-ce qu'on peut faire la même chose avec bash, ou dois-je créer un
script du type :
---
#!/bin/bash
set -f
mmv "$@"
---
?