Pesan itu adalah output pada stderr seperti semua pesan peringatan dan kesalahan.
Anda dapat menghapus semua output kesalahan:
tail -f file 2> /dev/null
Atau untuk memfilter hanya pesan kesalahan yang berisi truncate
:
{ tail -f file 2>&1 >&3 3>&- | grep -v truncated >&2 3>&-;} 3>&1
Namun itu berarti bahwa Anda kehilangan status keluar dari tail
. Beberapa shell memiliki pipefail
opsi (diaktifkan dengan set -o pipefail
) untuk pipa tersebut untuk melaporkan status keluar tail
jika gagal. zsh
dan bash
juga dapat melaporkan status masing-masing komponen pipa dalam $pipestatus
/ $PIPESTATUS
array mereka.
Dengan zsh
atau bash
, Anda dapat menggunakan:
tail -f file 2> >(grep -v truncated >&2)
Tetapi berhati-hatilah karena grep
perintah tersebut tidak ditunggu, jadi pesan kesalahan jika ada akhirnya ditampilkan setelah tail
keluar dan shell sudah mulai menjalankan perintah berikutnya dalam skrip.
Di zsh
, Anda dapat mengatasinya dengan menuliskannya:
{ tail -f file; } 2> >(grep -v truncated >&2)
Itu dibahas dalam zsh
dokumentasi di info zsh 'Process Substitution'
:
Ada masalah tambahan dengan >(PROCESS)
; ketika ini dilampirkan ke perintah eksternal, shell induk tidak menunggu PROSES selesai dan karenanya perintah segera berikut tidak dapat mengandalkan hasil yang lengkap. Masalah dan solusinya sama seperti yang dijelaskan di bagian MULTIOS dalam catatan Redirection :: . Oleh karena itu dalam versi sederhana dari contoh di atas:
paste <(cut -f1 FILE1) <(cut -f3 FILE2) > >(PROCESS)
(perhatikan bahwa tidak ada MULTIOS yang terlibat), PROSES akan dijalankan secara asinkron sejauh menyangkut shell induk. Solusinya adalah:
{ paste <(cut -f1 FILE1) <(cut -f3 FILE2) } > >(PROCESS)
Proses ekstra di sini dihasilkan dari shell induk yang akan menunggu penyelesaiannya.
(
)
daripada perintah yang rumit{
}
?