Quel messaggio viene emesso su stderr come tutti i messaggi di avviso e di errore.
Puoi eliminare tutto l'output dell'errore:
tail -f file 2> /dev/null
O per filtrare solo i messaggi di errore che contengono truncate:
{ tail -f file 2>&1 >&3 3>&- | grep -v truncated >&2 3>&-;} 3>&1
Ciò significa tuttavia che si perde lo stato di uscita di tail. Alcune shell hanno pipefailun'opzione (abilitata con set -o pipefail) per quella pipeline per segnalare lo stato di uscita tailse fallisce. zshe bashpuò anche segnalare lo stato dei singoli componenti della pipeline nel loro $pipestatus/ $PIPESTATUSarray.
Con zsho bash, puoi usare:
tail -f file 2> >(grep -v truncated >&2)
Ma attenzione che il grepcomando non è atteso, quindi i messaggi di errore se presenti potrebbero essere visualizzati dopo essere tailusciti e la shell ha già iniziato a eseguire il comando successivo nello script.
In zsh, puoi affrontarlo scrivendolo:
{ tail -f file; } 2> >(grep -v truncated >&2)
Questo è discusso nella zshdocumentazione all'indirizzo info zsh 'Process Substitution':
C'è un ulteriore problema con >(PROCESS); quando questo è collegato a un comando esterno, la shell padre non attende il completamento di PROCESS e quindi un comando immediatamente successivo non può fare affidamento sul completamento dei risultati. Il problema e la soluzione sono gli stessi descritti nella sezione MULTIOS nella nota Reindirizzamento :: . Quindi in una versione semplificata dell'esempio sopra:
paste <(cut -f1 FILE1) <(cut -f3 FILE2) > >(PROCESS)
(si noti che non sono coinvolti MULTIOS), PROCESS verrà eseguito in modo asincrono per quanto riguarda la shell madre. La soluzione è:
{ paste <(cut -f1 FILE1) <(cut -f3 FILE2) } > >(PROCESS)
I processi extra qui vengono generati dalla shell genitore che attenderà il loro completamento.
()rispetto a un comando complesso{}?