Ambiguous redirect en shell

Le
Kevin Denis
Bonjour,

je suis tombe sur un comportement bizarre en shell:
kevin@slack:~/tmp$ echo data > fichier autre chose
kevin@slack:~/tmp$ cat fichier
data autre chose

Ce comportement m'etonne. Comment l'expliquer?

d'un autre cote, j'en aurais peut etre l'utilite, mais quand je
scripte avec une variable:

kevin@slack:~/tmp$ FILE="b autre chose"
kevin@slack:~/tmp$ echo data > $FILE
-bash: $FILE: ambiguous redirect
kevin@slack:~/tmp$

Comment faire pour obtenir le meme comportement qu'au dessus?

Merci
--
Kevin
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Alain Ketterlin
Le #115679
Kevin Denis
je suis tombe sur un comportement bizarre en shell:
:~/tmp$ echo data > fichier autre chose


Tu peux même écrire "> fichier echo data autre chose". C'est comme ça,
les redirections peuvent apparaître n'importe où dans la ligne. Je ne
sais pas de quand ça date. L'avantage ? J'imagine que c'est plus
facile à programmer...

d'un autre cote, j'en aurais peut etre l'utilite, mais quand je
scripte avec une variable:

:~/tmp$ FILE="b autre chose"
:~/tmp$ echo data > $FILE
-bash: $FILE: ambiguous redirect


Heureusement. Trop dangereux.

-- Alain.

Stephane Chazelas
Le #115678
2007-10-31, 15:56(+00), Kevin Denis:
Bonjour,

je suis tombe sur un comportement bizarre en shell:
:~/tmp$ echo data > fichier autre chose
:~/tmp$ cat fichier
data autre chose

Ce comportement m'etonne. Comment l'expliquer?


Par le fait que les operateurs de redirections peuvent etre
placés n'importe ou.

d'un autre cote, j'en aurais peut etre l'utilite, mais quand je
scripte avec une variable:

:~/tmp$ FILE="b autre chose"
:~/tmp$ echo data > $FILE
-bash: $FILE: ambiguous redirect
:~/tmp$

Comment faire pour obtenir le meme comportement qu'au dessus?
[...]


eval "echo data > $file_and_other_arguments"

Si tu veux rediriger vers le fichier dont le chemin est contenu
dans la variable FILE, c'est

echo data > "$FILE"

toujours mettre des quotes autour des variables (sauf si on a
une bonne raison de ne pas le faire (ce qui entend comprendre ce
qu'on fait))

--
Stéphane

Kevin Denis
Le #115677
Le 31-10-2007, Stephane Chazelas
je suis tombe sur un comportement bizarre en shell:
:~/tmp$ echo data > fichier autre chose
:~/tmp$ cat fichier
data autre chose

Ce comportement m'etonne. Comment l'expliquer?


Par le fait que les operateurs de redirections peuvent etre
placés n'importe ou.

D'accord, j'ignorais.


d'un autre cote, j'en aurais peut etre l'utilite, mais quand je
scripte avec une variable:

:~/tmp$ FILE="b autre chose"
:~/tmp$ echo data > $FILE
-bash: $FILE: ambiguous redirect
:~/tmp$

Comment faire pour obtenir le meme comportement qu'au dessus?
[...]


eval "echo data > $file_and_other_arguments"

Ah oui, tout simplement en fait.


Si tu veux rediriger vers le fichier dont le chemin est contenu
dans la variable FILE, c'est

echo data > "$FILE"

Oui. Mais la, justement non. Je pensais a la variable FILE

qui pourrait bien evidemment contenir
fichier --options args

qui risque de creer le bon fichier d'une part, et de me
permettre ensuite d'avoir une variable FILE qui pourra avoir
des effets de bords interessants.

toujours mettre des quotes autour des variables (sauf si on a
une bonne raison de ne pas le faire


Je m'interrogeais justement sur les implications en terme
de securite. Il doit y avoir moyen de faire des injections de
code.

(ce qui entend comprendre ce qu'on fait))

C'est bien pour ca que je viens demander a la docte assemblee

d'eclairer ma lanterne.
Merci
--
Kevin


Stephane Chazelas
Le #115676
2007-10-31, 17:03(+00), Kevin Denis:
[...]
eval "echo data > $file_and_other_arguments"
[...]


Oui. Mais la, justement non. Je pensais a la variable FILE
qui pourrait bien evidemment contenir
fichier --options args

qui risque de creer le bon fichier d'une part, et de me
permettre ensuite d'avoir une variable FILE qui pourra avoir
des effets de bords interessants.


c'est chercher les ennuies...

toujours mettre des quotes autour des variables (sauf si on a
une bonne raison de ne pas le faire


Je m'interrogeais justement sur les implications en terme
de securite. Il doit y avoir moyen de faire des injections de
code.
[...]


Avec "eval", on ne peux pas faire plus "injection de code". eval
est la commande pour "evaluer" le code passé en argument.

Donc,

FILE='file; rm -rf -- "${HOME:-/}"'
eval "echo foo > $FILE"

est la meme chose qu'ecrire:

echo foo > file; rm -rf -- "${HOME:-/}"

--
Stéphane


Benoit Izac
Le #115518
Bonjour,

le 31/10/2007 à 18:23, Stephane Chazelas a écrit dans le message

Donc,

FILE='file; rm -rf -- "${HOME:-/}"'
eval "echo foo > $FILE"

est la meme chose qu'ecrire:

echo foo > file; rm -rf -- "${HOME:-/}"


Je viens de tester ; la deuxième commande m'a paru beaucoup plus rapide
que la première qui étrangement avait pris plus d'une minute avant que
je reprenne la main. J'en arrive à la conclusion que ce n'est pas tout
à fait équivalent.

Bon, je vais lire le fil suivant « Snapshopts incrémentaux tournants ».
Depuis le temps que je me dis qu'il faut que je fasse enfin une
sauvegarde de mes données, je sens que ça va m'intéresser.

--
Benoit Izac (Oups !)

Publicité
Poster une réponse
Anonyme