Màu sắc với lệnh unix “watch”?


Câu trả lời:


145

Một số phiên bản mới hơn watchhiện hỗ trợ màu.

Ví dụ watch --color ls -ahl --color.

Có liên quan .


3
hãy xem tại: superuser.com/questions/125469/… (câu trả lời đầu tiên) - Có thể bạn có thể liên kết nó trong câu trả lời của mình.
aatdark

11
Tôi đến đây để sử dụng watchvới git diff. FWIW, nhận được rằng để làm việc bạn phải vượt qua trong --color=alwaysđể git diff(ví dụ watch --color git diff --color=always.
theabraham

31

Không sử dụng watch... Khi bạn sử dụng các chương trình đồng hồ có thể phát hiện ra chúng không ghi vào thiết bị đầu cuối và sau đó tách màu. Bạn phải sử dụng cờ chương trình cụ thể để giữ các mã điều khiển ở đó.

Nếu bạn không biết cờ hoặc không có cờ, bạn có thể khiến người nghèo theo dõi bằng cách:

while sleep <time>; do clear; <command>; done

Nó sẽ có một chút nhấp nháy (đồng hồ hoạt động "bộ đệm kép") nhưng đối với một số thứ, nó đủ hữu ích.

Bạn có thể bị cám dỗ để làm một chiếc đồng hồ của người nghèo có bộ đệm kép bằng cách sử dụng

while sleep <time>; do <command> > /tmp/file; clear; cat /tmp/file; done

Nhưng sau đó bạn sẽ gặp lại tính năng "Tôi không viết thư cho thiết bị đầu cuối".


Có thể sử dụng while sleep <time>; do clear; <command> | tee /tmp/file; donethay vì >cat?
André Leria

mmm, tôi không hiểu @ AndréLeria ... | tee sẽ loại bỏ các mã màu như watchdo và không ngăn lệnh nhấp nháy
theist

Đó là một gợi ý cho ví dụ thứ hai, cũng không cung cấp cho tôi màu sắc. Hoặc có thể tôi đang làm gì đó sai?
André Leria,

1
@ AndréLeria "Ví dụ" thứ hai là một ví dụ sai (Như đã nói trong dòng las). Vấn đề là một khi bạn nhấn một đường ống, bạn sẽ mất các mã màu vì bạn không ghi vào thiết bị đầu cuối. Nó ở đó để hiển thị như thế nào sai là cố gắng để bù đắp các nhấp nháy do sự trôi đi thời gian giữa rõ ràng và thực hiện lệnh mục tiêu sử dụng một ống để làm việc đệm nhưwatch
hữu thần

4
Trong bash: while sleep <time> ; do x="$( <command> 2>&1 )" ; clear ; echo "$x" ; done- Nó chỉ sử dụng các nội trang vỏ để xóa màn hình và hiển thị đầu ra, do đó, đây là giải pháp thay thế ít nhấp nháy nhất.
Géza Török

18

Bạn có thể sao chép hoạt động cơ bản, không rườm rà watchtrong một vài dòng lệnh shell.

$ cat cheapwatch 
#!/bin/sh

# Not quite your Rolex

while true ; do
  clear
  printf "[%s] Output of %s:\n" "$(date)" "$*"
  # "$@" <- we don't want to do it this way, just this:
  ${SHELL-/bin/sh} -c "$*"
  sleep 1  # genuine Quartz movement
done

$ ./cheapwatch ls --color  # no problem

Cuối cùng, một người nào đó rất thông minh sẽ hack một trlệnh vào tập lệnh này để loại bỏ các ký tự điều khiển, sau đó buộc người dùng sử dụng --colorđể vô hiệu hóa logic đó. Vào thời điểm hiện tại, mục đích tuyệt đối của việc thực hiện này là giữ cho con quái vật ăn màu tránh xa.

Nếu bạn đang ở trong tình huống watchkhông có --colortùy chọn và bạn không thể nâng cấp gói vì bất kỳ lý do gì, có thể bạn có thể bỏ qua.



8

Trong khi các câu trả lời khác giải quyết vấn đề này, cách dễ nhất để thực hiện điều này là sử dụng unbuffercông cụ. Để sử dụng nó chỉ cần làm:

$ watch --color 'unbuffer <your-program>'

Bằng cách này, bạn không phải tìm kiếm các cờ trình tự điều khiển cho phép chương trình của bạn. Tuy nhiên, lưu ý là phiên bản đồng hồ của bạn phải hỗ trợ --colorcờ.

Bạn có thể cài đặt bộ đệm trên Debian hoặc Ubuntu bằng cách sử dụng sudo apt-get install expect.


'unbuffer <command>'- mà không đưa ra một lệnh cụ thể để sử dụng thì điều này sẽ trả lời câu hỏi như thế nào?
Danoram

@Danoram Có gì không rõ ràng đối với bạn? Bạn có cần trợ giúp để thay thế <command>bằng chương trình cụ thể mà bạn muốn chạy bằng màu sắc không?
Avamander

@Avamander Tôi đã viết nhận xét đó vì câu hỏi đã bị gắn cờ. Nếu bạn kiểm tra lịch sử chỉnh sửa, bạn sẽ thấy tác giả đã cập nhật câu trả lời. Không có gì là không rõ ràng. Bình luận của tôi không còn liên quan nữa ..
Danoram

1

Từ hướng dẫn sử dụng đồng hồ:

Các ký tự không in được sẽ bị xóa khỏi đầu ra của chương trình. Sử dụng "cat -v" như một phần của đường dẫn lệnh nếu bạn muốn xem chúng.

Mặc dù vậy, tôi không chắc chắn về cách sử dụng nó.


5
Điều này làm cho các ký tự điều khiển hiển thị trong đầu ra đối với tôi, thay vì gây ra màu sắc. Ví dụ watch -c "ls --color|cat -v"hiển thị ^[[0m^[[01;34mAgent^[[0mcho dòng đầu tiên.
Drew Noakes

1
thửwatch --color ls --color=always .
Zhang LongQI
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.