"Input" e "argomenti della riga di comando" sono cose diverse.
rm
rimuove i file forniti come argomenti.
Una pipe reindirizza l'output del comando di sinistra all'input del comando di destra. Non influisce sugli argomenti della riga di comando del programma a destra.
Per fare quello che stai cercando di fare, prova a usare xargs
per convertire l'input standard in argomenti della riga di comando per l'esecuzione di un programma. Questo è il suo lavoro.
which gem | xargs rm
, ad esempio, rimuoverà il gem
nel tuo PERCORSO.
rm
non accetta input, accetta argomenti. Questi sono diversi. Gli argomenti sono le opzioni, i nomi dei file e così via che fornisci a un programma sulla riga di comando per influenzarne il comportamento. L'input è il dato su cui lavora il programma. Ad esempio, grep
accetta sia input che argomenti:
grep "foo" file.txt
Ci sono due argomenti lì "foo"
e file.txt
. L'input è il contenuto di file.txt
, non la stringa file.txt
si. Poiché grep accetta input, puoi usarlo con pipe:
cat file.txt | grep "foo"
produce lo stesso output, dato che cat prende file.txt
come argomento e producendo i contenuti di file.txt
come uscita. Quell'output viene quindi reindirizzato a grep, dando lo stesso effetto di avere grep aperto il file stesso, come nel primo esempio.
Se desideri utilizzare l'output di un programma come argomento a un altro, usi i backtick:
rm `which gem`
o questa sintassi alternativa (specifica per bash):
rm $(which gem)
Modifica:o xargs
come sottolinea un altro rispondente. Molti modi per scuoiare un gatto con una riga di comando.
Dai un'occhiata al man
pagine di comandi che ti interessano. Questi programmi indicheranno che leggono da stdin
(prova man grep
per un comando popolare che legge stdin).