Domanda
Voglio capire l'uso di xargs man
in codice di Raperonzolo :
screen -t man /bin/sh -c 'xargs man || read'
Grazie alla Rampion: non abbiamo bisogno di cat
Perché abbiamo bisogno xargs
nel comando?
Capisco la -parte xargs
come segue
- cat nulla a xargs
- xargs fa un elenco di uomo -commands
Ho avuto un'idea che xargs fa un elenco di comandi. Per esempio,
find . -type f -print0 | xargs -0 grep masi
è lo stesso di un elenco di comandi:
find fileA AND grep masi in it
find fileB AND grep masi in it
and so on for fileC, fileD, ...
Soluzione
No, non mi cat
nulla. I cat qualunque ingresso ricevo dopo aver eseguito il comando. cat
è in realtà estranea qui, quindi cerchiamo di ignorarlo.
xargs man
attende all'input dell'utente. Che è necessario. Dal momento che nello script si afferrato che da, non posso incollare l'argomento per l'uomo fino a dopo creo la finestra. Così il comando che viene eseguito nella finestra deve attendere per me dare qualcosa, prima che si tenta di eseguire l'uomo.
Se abbiamo appena finito screen /bin/sh -d 'man || read'
, sarebbe sempre lamentarsi "Che pagina di manuale vuoi?" dal momento che non abbiamo mai detto che.
Altri suggerimenti
xargs raccoglie argomenti da stdin ed esegue il comando dato con questi argomenti.
in modo gatto è in attesa di qualcosa che deve essere digitato, e poi xargs è in esecuzione l'uomo con quella di ingresso.
xargs è utile se si hanno un sacco di file da elaborare, io uso spesso con l'uscita da trovare.
xargs saranno roba tanti argomenti come può sulla riga di comando.
E 'fantastico per fare qualcosa di simile
find . -name '*.o' -print | xargs rm
Il comando cat
non funziona sul nulla; opera su standard input, fino a quando si racconta che l'ingresso è finita. Come osserva Rampion, il comando cat
non è necessario qui, ma è in funzione sul suo ingresso implicita (standard input), non sul nulla.
Il comando xargs
legge l'uscita dal cat
, e gruppi le informazioni in argomenti al comando man
specificato come il suo (unico) argomento. Quando raggiunge un limite (configurabile sulla riga di comando), si eseguirà il comando man
.
Le offerte idioma find ... -print0 | xargs -0 ...
con nomi di file che contengono caratteri scomodi quali spazi vuoti, tabulazioni e ritorni a capo. Le stampe comando find
ogni nome di file seguito da un ASCII NUL ('\0'
); questo è uno dei due caratteri che non possono essere visualizzati in un semplice nome di file - l'altro è '/' (che appare in nomi di percorso, naturalmente, ma non nei nomi di file semplici). Non è direttamente equivalente alla sequenza che fornisci; gruppi collezioni xargs
di nomi di file in un singolo elenco di argomenti, fino a un limite di dimensione. Se i nomi sono abbastanza breve (di solito sono), quindi ci saranno meno esecuzioni di grep
che ci sono i nomi dei file.
Nota, anche, l'grep
stampa solo il nome del file in cui il materiale viene trovata se ha più di un file per la ricerca - o se supporta un'opzione in modo che stampi sempre i nomi dei file e l'opzione viene utilizzata: '-H
' è un'estensione GNU per grep
che fa questo. Il modo portabile per garantire che i nomi dei file appaiono sempre è quello di elencare /dev/null
come il primo file (in modo 'xargs grep something /dev/null
'); non ci vuole molto per cercare /dev/null
.