In generale, xargs
viene utilizzato per i casi in cui è possibile reindirizzare (con il simbolo |
) qualcosa da un comando all'altro ( Command1 | Command2
), ma l'output del primo comando non viene ricevuto correttamente come input per il secondo comando.
Ciò si verifica in genere quando il secondo comando non gestisce correttamente l'immissione dei dati tramite Standard In (stdin) (ad esempio: più linee come input, il modo in cui le linee sono impostate, i caratteri utilizzati come input, più parametri come input, il tipo di dati ricevuto come input, ecc.). Per darti un rapido esempio, prova quanto segue:
Esempio 1:
ls | echo
- Questo non farà nulla poiché echo
non sa come gestire l'input che sta ricevendo. Ora in questo caso, se lo utilizziamo xargs
, elaborerà l'input in un modo che può essere gestito correttamente da echo
(ad esempio: come una singola riga di informazioni)
ls | xargs echo
- Questo produrrà tutte le informazioni da ls
un'unica riga
Esempio 2:
Diciamo che ho più file goLang in una cartella chiamata go. Vorrei cercarli con qualcosa del genere:
find go -name *.go -type f | echo
- Ma se il simbolo del tubo lì e echo
alla fine, non funzionerebbe.
find go -name *.go -type f | xargs echo
- Qui funzionerebbe grazie a xargs
ma se volessi ogni risposta dal find
comando in una sola riga, farei quanto segue:
find go -name *.go -type f | xargs -0 echo
- In questo caso, lo stesso output find
verrà mostrato da echo
.
Comandi come cp, echo, rm, less
e altri che necessitano di un modo migliore per gestire l'input ottengono un vantaggio se usati con xargs
.