"Entrada" y "argumentos de línea de comando" son cosas diferentes.
rm
elimina los archivos proporcionados como argumentos.
Una tubería redirige la salida del comando de la mano izquierda a la entrada del comando de la derecha. No afecta a los argumentos de la línea de comandos del programa de la derecha.
Para hacer lo que intenta hacer, intente usar xargs
para convertir la entrada estándar en argumentos de línea de comandos para ejecutar un programa. Ese es su trabajo.
which gem | xargs rm
, por ejemplo, eliminará el gem
en tu RUTA.
rm
no toma entrada, toma argumentos. Estos son diferentes. Los argumentos son los interruptores y los nombres de archivo, etc., que le da a un programa en la línea de comando para afectar su comportamiento. La entrada son los datos sobre los que trabaja el programa. Por ejemplo, grep
toma tanto la entrada como los argumentos:
grep "foo" file.txt
Hay dos argumentos allí "foo"
y file.txt
. La entrada es el contenido de file.txt
, no la cadena file.txt
sí mismo. Dado que grep toma entrada, puede usarla con tuberías:
cat file.txt | grep "foo"
produce el mismo resultado, ya que cat está tomando file.txt
como argumento, y produciendo los contenidos de file.txt
como salida. Esa salida luego se canaliza a grep, dando el mismo efecto que si grep abriera el archivo, como en el primer ejemplo.
Si desea utilizar la salida de un programa como argumento a otro, usas acentos graves:
rm `which gem`
o esta sintaxis alternativa (específica de bash):
rm $(which gem)
Editar:o xargs
como señala otro respondedor. Muchas formas de despellejar a un gato con una línea de comandos.
Mira el man
páginas de comandos que le interesan. Estos programas indicarán que leen desde stdin
(prueba man grep
para un comando popular que lee stdin).