#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 :
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).
#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.
En ligne