Unix komutu "izle" olan renkler?


Yanıtlar:



30

Kullanmayın watch... Saat programlarını kullandığınızda, bir terminale yazmadıklarını algılayabilir ve ardından rengi çıkarabilir. Kontrol kodlarını orada tutmak için belirli program bayrakları kullanmalısınız.

Bayrakları bilmiyorsan ya da yoksa bir fakirin adamını izletebilirsin:

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

Biraz titreyecek (izle "çift tamponlu" çalışıyor) ama bazı şeyler için yeterince kullanışlıdır.

Kullanarak çift tamponlu zavallı bir adamın saati yapmak isteyebilirsiniz.

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

Ama sonra tekrar "Bir terminale yazmıyorum" özelliğine basarsınız.


Belki ve while sleep <time>; do clear; <command> | tee /tmp/file; doneyerine kullanın ? >cat
André Leria

mmm bunu @ AndréLeria anlamıyorum ... | tee, watchdo gibi renk kodlarını kaldıracak ve komutun titremesini engellemeyecek
teist

Bana renk vermeyen ikinci örnek için bir öneri. Ya da belki yanlış bir şey yapıyorum?
André Leria

1
@ AndréLeria İkinci "örnek" yanlış bir örnektir (Las satırında söylendiği gibi). Mesele şu ki, bir boruya vurduğunuzda, bir terminale yazmadığınız için renk kodlarını kaybedersiniz. Silinme ile hedef komutun yürütülmesi arasındaki zaman aşımı nedeniyle oluşan titreşimi telafi etmeye çalışmanın ne kadar yanlış olduğunu göstermek için oradawatch
teist

5
Bash'de: while sleep <time> ; do x="$( <command> 2>&1 )" ; clear ; echo "$x" ; done- Ekranı temizlemek ve çıktıyı görüntülemek için yalnızca kabuk yerleşiklerini kullanır, bu nedenle en az titreşen alternatiftir.
Géza Török

17

Temel, gösterişsiz işlemi watchbirkaç satırlık bir kabuk betiğinde çoğaltabilirsiniz .

$ 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

Sonunda, çok zeki biri, trkontrol karakterlerini çıkaran ve ardından kullanıcıyı --colorbu mantığı devre dışı bırakmak için kullanmaya zorlayan bu komut dosyasına bir komut kırar . Şimdilik, bu uygulamanın saf saflığı renk yiyen canavarı uzak tutuyor.

Seçeneğinizin watcholmadığı bir durumdaysanız --colorve herhangi bir nedenle paketi yükseltemiyorsanız, belki bunu atabilirsiniz.



8

Diğer yanıtlar bu sorunu çözerken, bunu başarmanın en kolay yolu unbufferaracı kullanmaktır . Kullanmak için yapmanız gerekenler:

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

Bu şekilde, programınızın bayraklarını etkinleştiren kontrol sırası aramanıza gerek kalmaz. Ancak uyarı, saat sürümünüzün aşağıdakileri desteklemesi gerektiğidir:--color bayrağı .

Unbuffer'ı kullanarak Debian veya Ubuntu'ya yükleyebilirsiniz sudo apt-get install expect.


'unbuffer <command>'- kullanmak için belirli bir komut vermeden bu soruya nasıl cevap verir?
Danoram

@Danoram Sizin için belirsiz olan nedir? Renklerle <command>çalıştırmak istediğiniz belirli bir programla değiştirme konusunda yardıma mı ihtiyacınız var ?
Avamander

@Avamander Bu yorumu, soru işaretlendiği için yazardım. Düzenleme geçmişini kontrol ederseniz yazarın yanıtı güncellediğini görürsünüz. Hiçbir şey net değil. Yorumum artık alakalı değil ..
Danoram

1

Saat kılavuzundan:

Yazdırılmayan karakterler program çıktısından çıkarılır. Bunları görmek istiyorsanız komut ardışık düzeninin bir parçası olarak "cat -v" kullanın.

Yine de nasıl kullanacağımdan emin değilim.


5
Bu, renklenmeye neden olmak yerine kontrol karakterlerinin çıktıda benim için görünmesine neden oluyor. Örneğin ilk satır için watch -c "ls --color|cat -v"gösterir ^[[0m^[[01;34mAgent^[[0m.
Drew Noakes

1
denewatch --color ls --color=always .
Zhang LongQI
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.