korunmuş renkler ile bash izle komutu


57

Kimden man watch:

Yazdırılmayan karakterler program çıktısından çıkarılır. Görmek istiyorsanız komut satırının bir parçası olarak "cat -v" kullanın.

Peki cat -vrenkli çıktıyı görmek istersem nasıl kullanırım :

watch ls -al --color

Yanıtlar:


63

Doğru komut

watch --color "ls -a1 --color"

Adam sayfasında veya - yardım ekranında belgelenmemiş. Onu bulmak için dizeleri kullanmak zorundayım.


@ PawełGościcki Nevermind, çoktan gösterişli bulmuş olmasına rağmen, phpunit ile çalışmasını sağlayamadı.
Belirtilmemiş

1
Saatim v0.3.0 ve Ubuntu
10.0'dayım

2
Ben de sürüm 0.3.0 ve basit "ls --color" için saat komutu çalışacak ama nedense daha karmaşık senaryolar işe yaramaz: watch --color "sudo iwlist wlan0 scanning | egrep 'Quality|ESSID' | egrep --color -i 'foobar|$'"renkleri yer ::
math

@ math: Tek ve çift tırnaklarınızı değiştirmeyi deneyin.
Dennis Williamson

watchPROCPS (çoğu Linux dağıtımlarının varsayılan, inanıyorum) bir sahiptir --colorV3.3.2 beri seçeneği.
sleske,

27

'İzle' komutuyla mümkün olamayacağını düşünüyorum. İşte bunu yapmanın daha uzun bir yolu:

while true; do clear; date;echo;ls -al --color; sleep 2; done

Bunu bir komut dosyasına koyabilirsiniz, örneğin:

echo "while true; do clear; date;echo;\$*;sleep 2; done" > watch2
chmod +x watch2
./watch2 ls -al --color

Netleştirmek için, işte bu yüzden 'watch' komutuyla bunun mümkün olmadığını düşünüyorum. Cat -v kullanırsanız ne olacağını görün:

watch "ls -al --color|cat -v"

Sana istediğin şeyin olmadığını düşündüğüm renk kontrol karakterlerini gösteriyor.


man watchaçıkça kesmeden mümkün olması gerektiğini önerir watch.
Paweł Gościcki

Renkleri görebileceksiniz demek değil. Yazdırılamayan karakterleri görebileceğinizi söylüyor. Neden bahsettiğimi cat -vgörmek man watchiçin emrimi yukarıdaki gibi deneyin .
davr

1
Göz kırpma süresini, a) bir değişkende gösterilecek verileri toplayarak, b) ekranı silerek, c) değişkeni basarak azaltabilirsiniz.
Nick Russo,

1
@NickRusso öneri için teşekkürler. Bunun gibi bir şey büyük titremeyi azaltır:while true; do out=$(date;echo;ls -al --color);clear;echo $out;sleep 2;done
Kevin Mark

1
@KevinMark: Birden satırları işlemek için tırnak kullanmalısınız: echo "$out". stackoverflow.com/q/2414150/86967
nobar

6

Mac kullanıyorsanız, benim gibi, watchHomebrew'den rengi desteklemiyor.

İstediğiniz şey fswatch ama henüz Homebrew değil. Yüklemek için biraz daha sarsılmış yapmak isteyeceksiniz

https://raw.github.com/mlevin2/homebrew/116b43eaef08d89054c2f43579113b37b4a2abd3‌​/Library/Formula/fswatch.rb

Kullanım için bu SO cevabına bakınız .


2
Bu sadece dosya sistemi için watchgeçerlidir, bir emir için de geçerlidir
Brice

fswatch Homebrew 0.9.5
code_monk

1

GÜNCELLEME : watchSorunu çözmenin en son sürümlerini ortaya çıkarır . Yani, renkleri watch --coloryanlış ise, sadece güncellemek daha iyidir (benim sistemimde, procpspakette).


Renk desteği watch --colorbenim deneyimimde sınırlı (ancak bunun için yeterli ls -l --color). İşte @ davr'ın bazı ekstra özelliklere cevap verdiği ve en önemlisi titremeyi azaltan versiyonum. .Bashrc'nize yerleştirip kullanabilirsiniz cwatch ls -l --color.

# `refresh cmd` executes clears the terminal and prints
# the output of `cmd` in it.
function refresh {
  tput clear || exit 2; # Clear screen. Almost same as echo -en '\033[2J';
  bash -ic "$@";
}

# Like watch, but with color
function cwatch {
   while true; do
     CMD="$@";
     # Cache output to prevent flicker. Assigning to variable
     # also removes trailing newline.
     output=`refresh "$CMD"`;
     # Exit if ^C was pressed while command was executing or there was an error.
     exitcode=$?; [ $exitcode -ne 0 ] && exit $exitcode
     printf '%s' "$output";  # Almost the same as echo $output
     sleep 1;
   done;
}

Ayrıca gibi şeyler deneyebilirsiniz

cwatch 'ls -l --color | head -n `tput lines`'

Eğer terminalinizde çıkıştan daha az sayıda hat varsa. Bu, ancak tüm hatların terminal genişliğinden daha kısa olması durumunda işe yarar. Bunun için bildiğim en iyi geçici çözüm:

cwatch 'let lines=`tput lines`-2; ls -l --color | head -n $lines'
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.