Perché tail -f non funziona bene con xargs?
Questo comando funziona come previsto, vedo un blocco di testo:
tail /var/log/auth.log|xargs echo
Ma questo comando non mi mostra nulla:
tail -f /var/log/auth.log|xargs echo
Tutti e due tail
e tail -f
avere uscita Si potrebbe pensare che si tratti di terminatori di riga, ma impostare entrambi su null non ha funzionato:
tail -z -f /var/log/auth.log|xargs -0 echo
risposte:
3 per risposta № 1Perché tail -f
non termina, è ancora in attesa di nuove righe da aggiungere xargs
(a meno che non si usi -L
o simili) attende fino a quando non ha argomenti "sufficienti" per rendere utile eseguire la riga di comando.
Se la tua intenzione era di eseguire il comando una volta per ogni riga, usa xargs -L1
. Vedere man xargs
per dettagli:
-L max-lines Use at most max-lines nonblank input lines per command line. Trailing blanks cause an input line to be logically continued on the next input line. Implies `-x`.
Attenzione per il comportamento "spazi vuoti finali". Puoi evitarlo usando -I
invece di -L1
e specificando un argomento di sostituzione esplicito:
tail -f /var/log/auth.log | xargs -I {} echo {}