Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/03/2018, à 20:11

DonutMan75

Tiens j'ai découvert un truc sur les pipes

Bonsoir à tous,
voilà j'ai un dossier contenant 3 répertoires :

$ ls -1
.
..
RUN_2018_03_09_19h19
RUN_2018_03_09_19h35
RUN_2018_03_09_20h00

J'ai voulu créer un fichier README à la racine de ce répertoire avec le nom de ces 3 dossiers et un petit descriptif.

Comme je suis un gros fainéant, j'ai voulu gagner un peu de temps avec la commande :

ls -1 | grep -v '\.' > README

Bon le "grep -v '\.'" n'est probablement pas super propre.
Néanmoins, quand j'ai ouvert mon fichier README, j'y ai trouvé ça :

$ cat README
README
RUN_2018_03_09_19h19
RUN_2018_03_09_19h35
RUN_2018_03_09_20h00

Autrement dit, la redirection a créé le fichier README *avant* l'exécution du ls !

Ca signifierait par exemple que, si nous avons accés en RW sur /dossierA/ mais pas sur /dossierB/ alors la commande suivante ne supprimera pas /dossierA/fichier

$ rm /dossierA/fichier > /dossierB/log

Enfin voilà, je voulais partager ça avec vous.
C'est peut-être connu de certains d'entre vous d'ailleurs.

Bonne soirée à tous,

Donut

Hors ligne

#2 Le 09/03/2018, à 20:37

pingouinux

Re : Tiens j'ai découvert un truc sur les pipes

Bonsoir,
Tes conclusions sont justes.

Remarques :

1) Pour lister tous les fichiers, y compris les fichiers cachés, mais en excluant . et ..

ls -A

2) Le paramètre -1 de ls est inutile en cas de pipe ou de redirection

3) Pour ne pas voir README dans la liste, tu peux faire

ls -A >../README
mv ../README .

Hors ligne

#3 Le 10/03/2018, à 08:52

serged

Re : Tiens j'ai découvert un truc sur les pipes

C'est encore pire sous MS-DOS / Windows... les pipes (|) créent un fichier temporaire dans le répertoire courant. Ainsi :

dir|more

Doit faire apparaître un fichier fantôme...


LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)

Hors ligne

#4 Le 10/03/2018, à 09:14

bruno

Re : Tiens j'ai découvert un truc sur les pipes

Bon ce n'est pas un trudc avec les « pipes » mais avec les redirections. Et cela n'a rien de surprenant :

https://www.gnu.org/software/bash/manual/html_node/Redirections.html a écrit :

3.6 Redirections

Before a command is executed, its input and output may be redirected using a special notation interpreted by the shell

La redirection s'effectue avant que la commande ne soit exécutée. Si la redirection s'effectue vers un fichier qui n'existe pas, il est donc créé avant que la commande ne soit exécutée.

Le pipe (ou tube) permet lui d'alimenter l'entrée d'un processus (ici grep) par la sortie du précédent (ici ls).

Hors ligne

#5 Le 10/03/2018, à 11:48

Watael

Re : Tiens j'ai découvert un truc sur les pipes

Ca signifierait par exemple que, si nous avons accés en RW sur /dossierA/ mais pas sur /dossierB/ alors la commande suivante ne supprimera pas /dossierA/fichier

non.

$ > testDir/A/dd
$ rm testDir/A/dd > testDir/B/d
$ ls -1 testDir/A
AA/
a
c

le comportement que tu décris (création du fichier de redirection avant l'exécution d'une commande) est lié aux redirections, et pas aux pipes.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne