Voir "Pipe cassée" dans cette situation est rare, mais normal.
Lorsque vous exécutez type rvm | head -1, bash s'exécute type rvmdans un processus, head -1dans un autre. 1 La sortie standard de typeest connectée à l'extrémité "écriture" d'un tuyau , la sortie standard headà l'extrémité "lecture". Les deux processus s'exécutent en même temps.
Le head -1processus lit les données de stdin (généralement par blocs de 8 Ko), imprime une seule ligne (selon l' -1option) et se ferme, provoquant la fermeture de l'extrémité "lecture" du tuyau. Étant donné que la rvmfonction est assez longue (environ 11 kB après avoir été analysée et reconstruite par bash), cela signifie que la headsortie typea encore quelques kB de données à écrire.
À ce stade, puisque typetente d'écrire sur un tuyau dont l'autre extrémité a été fermée - un tuyau cassé - la fonction write () qu'elle a appelée renverra une erreur EPIPE, traduite par "tuyau cassé". En plus de cette erreur, le noyau envoie également le signal SIGPIPE à type, qui par défaut tue immédiatement le processus.
(Le signal est très utile dans les shells interactifs, car la plupart des utilisateurs ne veulent pas que le premier processus continue de fonctionner et essaie d'écrire nulle part. Pendant ce temps, les services non interactifs ignorent SIGPIPE - il ne serait pas bon pour un démon de longue durée de mourir sur une erreur aussi simple - ils trouvent donc le code d'erreur très utile.)
Cependant, la livraison du signal n'est pas 100% immédiate, et il peut y avoir des cas où write () renvoie EPIPE et le processus continue de s'exécuter pendant un court moment avant de recevoir le signal. Dans ce cas, typeobtient suffisamment de temps pour remarquer l'échec de l'écriture, traduire le code d'erreur et même imprimer un message d'erreur à stderr avant d'être tué par SIGPIPE. (Le message d'erreur indique "-bash: type:" car il types'agit d'une commande intégrée de bash lui-même.)
Cela semble être plus courant sur les systèmes multi-CPU, car le typeprocessus et le code de livraison du signal du noyau peuvent s'exécuter sur différents cœurs, littéralement en même temps.
Il serait possible de supprimer ce message en typecorrigeant le code intégré (dans le code source de bash) pour qu'il se ferme immédiatement lorsqu'il reçoit un EPIPE de la fonction write ().
Cependant, il n'y a rien à craindre et ce n'est en aucun cas lié à votre rvminstallation.