Sử dụng đồng hồ với đường ống


179

Tôi muốn chạy lệnh này:

watch -n 1 tail -n 200 log/site_dev.log | grep Doctrine

Nhưng nó không chạy, bởi vì "tôi nghĩ" rằng grep cố chạy trên đồng hồ thay vì đuôi ...

Có cách nào để làm một cái gì đó như

watch -n 1 (tail -n 200 log/site_dev.log | grep Doctrine)

Cảm ơn rất nhiều!

Câu trả lời:


269

Bao quanh lệnh với dấu ngoặc kép

watch -n 1 'tail -n 200 log/site_dev.log | fgrep Doctrine'

2
Điều gì nếu đường ống cũng chứa dấu ngoặc kép (chẳng hạn như awk '{print $3}')? Chỉnh sửa: Như thế này
OrangeDog

2
bạn có thể thoát khỏi những ký tự với \, tứcwatch -n 'awk \'{print $3}\''
lev

29

Tôi có thể sai, nhưng điều này sẽ không đạt được điều tương tự (xem các dòng nhật ký phù hợp khi chúng được thêm vào) đơn giản hơn?

tail -f -n 200 log/site_dev.log | grep Doctrine

6
Tôi đồng ý rằng điều này có thể hiệu quả hơn khi có liên quan đến CPU, nhưng trong bối cảnh của chủ đề "Sử dụng đồng hồ với đường ống", nó không sử dụng đồng hồ nên không phải là một câu trả lời. Đây có thể là một trường hợp của một câu hỏi ví dụ nghèo nàn vì đồng hồ và đường ống dường như xuất hiện thường xuyên không trong bối cảnh của đuôi.
tudor

1
Không, tôi nghĩ rằng bạn đang nhầm lẫn giữa phương tiện và kết thúc. Người dùng rõ ràng muốn thấy việc Doctrineđến trong một tệp đang phát triển và khi anh ta nhìn vào hộp công cụ của mình, điều duy nhất anh ta tìm thấy là watch. Những gì anh thực sự cần phải biết là tail -f. Xem thêm meta.stackexchange.com/questions/66377/what-is-the-xy-pro
Hiệu

10
Tôi nghĩ rằng đây là cả hai câu trả lời chấp nhận được. Câu trả lời hàng đầu và được chấp nhận trả lời chính xác câu hỏi chính xác được đặt ra và câu trả lời này xác định chính xác vấn đề XY mà OP tự tạo ra và cung cấp giải pháp họ thực sự muốn ngay từ đầu. Cả hai câu trả lời có thể dễ dàng hữu ích cho ai đó đi qua câu hỏi này.
cdhowie

2
Tôi đang tìm cách để xem shellcheck *.sh | grep line | wc -lvà câu trả lời được chấp nhận là hữu ích cho tôi.
Amedee Van Gasse

2

Bạn có thể bao quanh lệnh bằng dấu ngoặc kép:

watch -n 1 'tail -n 200 log/site_dev.log | fgrep Doctrine'

Nếu lệnh có dấu ngoặc kép trong đó, bạn có thể sử dụng một loại dấu ngoặc kép khác với lối thoát thích hợp:

watch -n 1 $'tail -n 200 log/site_dev.log | fgrep \'Doctrine.*\''

Nếu bạn đang cố gắng làm điều gì đó thực sự thông minh, hãy đặt lệnh hoặc lệnh trong tập lệnh và sử dụng lệnh đó với watch:

cat <<EOF >/tmp/watch-command
tail -n 200 $(pwd)/log/site_dev.log | fgrep Doctrine
EOF
chmod +x /tmp/watch-command
watch /tmp/watch-command

Hãy chắc chắn để tính toán các đường dẫn tương đối nếu cần thiết.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.