色を保持したbash watchコマンド


56

からman watch

印刷されない文字は、プログラム出力から削除されます。それらを表示する場合は、コマンドパイプラインの一部として「cat -v」を使用します。

だからcat -v、色付きの出力を表示したい場合はどのように使用しますか:

watch ls -al --color

回答:


61

正しいコマンドは

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

マニュアルページや--help画面には記載されていません。それを見つけるために文字列を使用する必要があります。


@PawełGościckiNevermind、すでにそれはto笑で発見されましたが、phpunitで動作させることはできませんでした。
-Ikke

1
私の時計はv0.3.0であり、私はUbuntuの10.0によ
パヴェルGościcki

2
私は、バージョン0.3.0とシンプルにもしました「LS --color」watchコマンドは動作しますが、より複雑なシナリオがないいくつかの理由のために:watch --color "sudo iwlist wlan0 scanning | egrep 'Quality|ESSID' | egrep --color -i 'foobar|$'":(色を食べるようになる
数学

@math:一重引用符と二重引用符を入れ替えてみてください。
デニスウィリアムソン

watchprocpsの(ほとんどのLinuxディストリビューションのデフォルトは、私は信じている)からは、持っている--colorV3.3.2以降のオプションを選択します。
sleske

27

「ウォッチ」コマンドでは不可能だと思います。これを行うより長い方法を次に示します。

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

たとえば、これをスクリプトに入れることができます。

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

明確にするために、「監視」コマンドでは不可能だと思う理由を次に示します。cat -vを使用するとどうなるかをご覧ください。

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

それはあなたに色制御文字を示しています...私はあなたが望むものではないと思います。


man watch明かすことなくそれが可能であるべきであると示唆しwatchます。
パウェウゴチッキ

色を見ることができるとは言わない。印刷できない文字を見ることができると書かれています。上記のように私のコマンドを試して、cat -vman watchが話しているのかを確認してください。
-davr

1
a)変数に表示するデータを収集する、b)画面をクリアする、c)変数を印刷することにより、点滅の持続時間を少し減らすことができます。
ニック

1
@NickRusso提案をありがとう。このような何かを大幅にちらつきを低減:while true; do out=$(date;echo;ls -al --color);clear;echo $out;sleep 2;done
ケビン・マーク・

1
@KevinMark:引用符を使用して複数の行を処理する必要があります:echo "$out"stackoverflow.com/q/2414150/86967
nobar

6

私のようにwatch、HomebrewのMacを使用している場合、色はサポートされません。

欲しいのはfswatchですが、まだHomebrewではありません。それをインストールするには、もう少し複雑なことをしたいでしょう

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

使用方法については、このSOの回答を参照してください。


2
一方、これは、ファイルシステムのために働くwatchのコマンドに適用されます
ブライス

fswatchはHomebrew 0.9.5で利用可能
code_monk 14年

1

更新watch問題を修正した最新バージョンが判明します。したがって、の色watch --colorが間違っている場合は、単に更新することをお勧めします(私のシステムでは、procpsパッケージ内にあります)。


watch --color私の経験では、色のサポートは限られています(ただし、には十分ですls -l --color)。これが私のバージョンの@davrの答えです。いくつかの追加機能がありますが、最も重要なのはちらつきを低減することです。それを.bashrcに入れて、として使用できます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;
}

次のようなこともできます

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

端末の行数が出力より少ない場合。ただし、すべての行が端末の幅より短い場合にのみ機能します。私が知っている最善の回避策は次のとおりです。

cwatch 'let lines=`tput lines`-2; ls -l --color | head -n $lines'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.