Esiste una distinzione tra argomenti della riga di comando e input standard. Una pipe collegherà l'output standard di un processo all'input standard di un altro. Così
ls | echo
Collega l'output standard di ls all'input standard di eco. Va bene vero? Bene, l'eco ignora l'input standard e scaricherà i suoi argomenti della riga di comando - che non sono nessuno in questo caso - il proprio stdout. L'output: niente di niente.
Ci sono alcune soluzioni in questo caso. Uno è usare un comando che legge stdin e dump su stdout, come cat.
ls | cat
Funzionerà, a seconda di quale sia la tua definizione di lavoro.
Ma per quanto riguarda il caso generale. Quello che vuoi davvero è convertire lo stdout di un comando in un argomento della riga di comando di un altro. Come altri hanno già detto, xargs
in questo caso è lo strumento di supporto canonico, leggere la sua riga di comando richiede un comando dal suo stdin e costruire comandi da eseguire.
ls | xargs echo
Puoi anche convertirlo un po ', usando il comando di sostituzione $()
echo $(ls)
Farebbe anche quello che vuoi.
Entrambi questi strumenti sono piuttosto fondamentali per lo scripting della shell, dovresti imparare entrambi.
Per completezza, come indicato nella domanda, l'altro modo di base per convertire stdin in args da riga di comando è il read
comando incorporato della shell . Converte "parole" (parole definite dalla IFS
variabile) in una variabile temporanea, che è possibile utilizzare in qualsiasi esecuzione di comandi.
ls | echo
di fare? perché non semplicemente correrels
?