команда bash watch с сохранением цветов

20315
Paweł Gościcki

От man watch:

Непечатаемые символы удаляются из вывода программы. Используйте «cat -v» как часть командного конвейера, если вы хотите их увидеть.

Так как мне использовать, cat -vесли я хочу увидеть цветной вывод из:

watch ls -al --color 
44

5 ответов на вопрос

48
paperhorse

Правильная команда

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

Это не задокументировано на странице руководства или на экране --help. Я должен использовать строки, чтобы найти его.

@ PawełGościcki Nevermind, уже нашел его на gitorious, но не смог заставить его работать с phpunit. Ikke 12 лет назад 0
Мои часы v0.3.0 и я на Ubuntu 10.0 Paweł Gościcki 12 лет назад 1
У меня также есть версия 0.3.0, и для простого "ls --color" команда watch будет работать, но по некоторым причинам более сложные сценарии этого не делают: "watch --color" sudo iwlist wlan0 scan | egrep 'Quality | ESSID' | egrep --color -i 'foobar | $' "` будет есть цвета :( math 12 лет назад 2
@ math: попробуйте поменять местами одинарные и двойные кавычки. Dennis Williamson 12 лет назад 0
`Watch` from procps (по-моему, по умолчанию в большинстве дистрибутивов Linux) имеет опцию` --color` начиная с V3.3.2. sleske 10 лет назад 0
Обратите внимание, что версия 3.3.2 доступна только в procps-ng, оригинальный procps.sf.net кажется, что разработка прекратилась много лет назад (версия все еще 3.2.8 и следите за версией 0.2.0). Также обратите внимание на пользователей OSX / Darwin: новая и поддерживаемая ветвь procps-ng еще не компилируется на OSX с использованием LLVM (см. Https://github.com/Homebrew/homebrew/pull/20845). Brice 10 лет назад 0
Как вы обновляете свою версию часов? Adam Hunyadi 6 лет назад 0
25
davr

Я думаю, что это может быть невозможно с командой 'watch'. Вот более длинный способ сделать это:

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». Paweł Gościcki 14 лет назад 0
Это не говорит о том, что вы сможете увидеть цвета. Там написано, что вы сможете увидеть непечатные символы. Попробуйте мою команду, как указано выше, с `cat -v`, чтобы увидеть, о чем говорил` man watch '. davr 14 лет назад 0
ХОРОШО. Кажется, я должен принять тот факт, что это просто невозможно. Paweł Gościcki 14 лет назад 0
Есть ли способ подавить мерцание, возникающее в результате циклов операций очистки и печати, поведение, отсутствующее в команде `watch`? user001 7 лет назад 0
Вы можете немного уменьшить продолжительность мигания путем а) ​​сбора данных для отображения в переменную, б) очистки экрана, в) печати переменной. Nick Russo 7 лет назад 1
@NickRusso спасибо за предложение. Нечто подобное значительно уменьшает мерцание: `пока верно; do out = $ (дата; echo; ls -al --color); очистить; echo $ out; sleep 2; done` Kevin Mark 6 лет назад 1
Также рассмотрите длину линии обрезки, чтобы вписаться в терминал: https://superuser.com/a/58812/114579 nobar 6 лет назад 0
@KevinMark: Вы должны использовать кавычки для обработки нескольких строк: `echo" $ out "`. https://stackoverflow.com/q/2414150/86967 nobar 6 лет назад 1
@nobar Ты прав. Похоже, он нуждается в кавычках в bash, а не в zsh. Kevin Mark 6 лет назад 0
@KevinMark Вы можете поставить команду «очистить» в скобках. Он просто печатает код управления терминалом. Смотрите также мой более длинный ответ https://superuser.com/a/1270584/21952. user21952-is-a-great-name 6 лет назад 0
4
fatuhoku

Если вы используете Mac, как я, watchот Homebrew не поддерживается цвет.

То, что вы хотите, это fswatch, но это еще не Homebrew. Чтобы установить его, вам нужно сделать немного более замысловатым

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

Смотрите этот SO ответ для использования.

Это работает только для файловой системы, в то время как `watch` применяется к команде Brice 10 лет назад 2
fswatch доступен на Homebrew 0.9.5 code_monk 9 лет назад 0
3
Dennis Williamson

watchне работает с выводом цвета, и я не знаю, как это сделать. Вы можете создать свой собственный скрипт для эмуляции.

1
user21952-is-a-great-name

ОБНОВЛЕНИЕ : Оказывается, последние версии 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' 

Похожие вопросы