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

  1. cat nulla a xargs
  2. 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, ...
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top