Thông báo đó là đầu ra trên thiết bị lỗi chuẩn như tất cả các thông báo lỗi và cảnh báo.
Bạn có thể bỏ tất cả đầu ra lỗi:
tail -f file 2> /dev/null
Hoặc để chỉ lọc các thông báo lỗi có chứa truncate
:
{ tail -f file 2>&1 >&3 3>&- | grep -v truncated >&2 3>&-;} 3>&1
Điều đó có nghĩa là tuy nhiên bạn mất trạng thái thoát tail
. Một vài shell có pipefail
tùy chọn (được bật với set -o pipefail
) cho đường ống đó để báo cáo trạng thái thoát tail
nếu nó không thành công. zsh
và bash
cũng có thể báo cáo trạng thái của các thành phần riêng lẻ của đường ống trong $pipestatus
/ $PIPESTATUS
mảng của chúng.
Với zsh
hoặc bash
, bạn có thể sử dụng:
tail -f file 2> >(grep -v truncated >&2)
Nhưng hãy cẩn thận rằng grep
lệnh không được chờ, vì vậy các thông báo lỗi nếu có thể cuối cùng sẽ được hiển thị sau khi tail
thoát và trình bao đã bắt đầu chạy lệnh tiếp theo trong tập lệnh.
Trong zsh
, bạn có thể giải quyết điều đó bằng cách viết nó:
{ tail -f file; } 2> >(grep -v truncated >&2)
Điều đó được thảo luận trong zsh
tài liệu tại info zsh 'Process Substitution'
:
Có một vấn đề bổ sung với >(PROCESS)
; khi điều này được gắn vào một lệnh bên ngoài, shell cha không chờ PROCESS kết thúc và do đó một lệnh ngay sau đó không thể dựa vào kết quả được hoàn thành. Vấn đề và giải pháp giống như được mô tả trong phần MULTIOS trong ghi chú Redirection :: . Do đó trong một phiên bản đơn giản hóa của ví dụ trên:
paste <(cut -f1 FILE1) <(cut -f3 FILE2) > >(PROCESS)
(lưu ý rằng không có MULTIOS nào được tham gia), PROCESS sẽ được chạy không đồng bộ khi có liên quan đến shell cha. Cách giải quyết là:
{ paste <(cut -f1 FILE1) <(cut -f3 FILE2) } > >(PROCESS)
Các quy trình bổ sung ở đây được sinh ra từ vỏ cha mẹ sẽ chờ hoàn thành.
(
)
hơn một lệnh phức tạp{
}
?