"Entrée" et "arguments de ligne de commande" sont des choses différentes.
rm
supprime les fichiers fournis en arguments.
Un tube redirige la sortie de la commande de gauche vers l'entrée de la commande de droite. Cela n'affecte pas les arguments de ligne de commande du programme de droite.
Pour faire ce que vous essayez de faire, essayez d'utiliser xargs
pour convertir l'entrée standard en arguments de ligne de commande pour l'exécution d'un programme. C'est son travail.
which gem | xargs rm
, par exemple, supprimera le gem
dans votre PATH.
rm
ne prend pas d'entrée, il prend des arguments. Ceux-ci sont différents. Les arguments sont les commutateurs et les noms de fichiers et ainsi de suite que vous donnez à un programme sur la ligne de commande pour affecter son comportement. L'entrée correspond aux données sur lesquelles le programme travaille. Par exemple, grep
prend à la fois l'entrée et les arguments :
grep "foo" file.txt
Il y a deux arguments ici "foo"
et file.txt
. L'entrée est le contenu de file.txt
, pas la chaîne file.txt
lui-même. Comme grep prend en entrée, vous pouvez l'utiliser avec des pipes :
cat file.txt | grep "foo"
produit la même sortie, puisque cat prend file.txt
comme argument, et produisant le contenu de file.txt
comme sortie. Cette sortie est ensuite redirigée vers grep, donnant le même effet que si grep ouvrait le fichier lui-même, comme dans le premier exemple.
Si vous souhaitez utiliser la sortie d'un programme comme argument à l'autre, vous utilisez des backticks :
rm `which gem`
ou cette syntaxe alternative (spécifique à bash) :
rm $(which gem)
Modifier :ou xargs
comme le souligne un autre répondant. De nombreuses façons de dépecer un chat avec une ligne de commande.
Découvrez le man
pages de commandes qui vous intéressent. Ces programmes indiqueront qu'ils lisent à partir de stdin
(essayez man grep
pour une commande populaire qui lit stdin).