Câu hỏi Sử dụng đồng hồ với ống


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ố gắng 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!


148
2018-05-12 19:23


gốc




Các câu trả lời:


Bao quanh lệnh bằng dấu ngoặc kép

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

236
2018-05-12 19:28



Điều gì sẽ xảy ra nếu đường dẫn 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


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 không?

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

27
2018-05-12 20:16



Tôi đồng ý điều này có thể hiệu quả hơn khi CPU được quan tâm, nhưng trong bối cảnh chủ đề "Sử dụng đồng hồ với ống" thì nó không sử dụng đồng hồ nên không phải là câu trả lời. Điều này có thể là một trường hợp của một câu hỏi ví dụ nghèo như xem và ống dường như xuất hiện thường xuyên không trong bối cảnh của đuôi. - tudor
Không, tôi nghĩ rằng bạn đang bối rối các phương tiện và kết thúc. Người dùng rõ ràng muốn xem Doctrine đến trong một tập tin đ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 tìm thấy là watch. Điều anh thực sự cần biết là tail -f. Xem thêm meta.stackexchange.com/questions/66377/what-is-the-xy-problem - dland
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 OP được tạo ra cho chính họ và cung cấp giải pháp mà họ thực sự muốn ở nơi đầu tiên. Cả hai câu trả lời có thể dễ dàng hữu ích cho người nào đó gặp phải câu hỏi này. - cdhowie
Tôi đang tìm cách xem shellcheck *.sh | grep line | wc -l và câu trả lời được chấp nhận là hữu ích cho tôi. - Amedee Van Gasse


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 cách 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 một tập lệnh và sử dụng nó với đồng hồ:

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

Đảm bảo tính đến đường dẫn tương đối nếu cần.


0
2017-08-27 16:00