От man watch
:
Непечатаемые символы удаляются из вывода программы. Используйте «cat -v» как часть командного конвейера, если вы хотите их увидеть.
Итак, как мне использовать cat -v
если я хочу увидеть цветной вывод из:
watch ls -al --color
Правильная команда
watch --color "ls -a1 --color"
Это не задокументировано на странице руководства или на экране --help. Я должен использовать строки, чтобы найти его.
Я думаю, что это может быть невозможно с командой '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"
Он показывает вам символы управления цветом ... что я думаю, не то, что вы хотите.
Если вы используете Mac, как я, watch
от Homebrew не поддерживают цвет.
То, что вы хотите, это fswatch, но это еще не Homebrew. Чтобы установить его, вам нужно сделать немного более замысловатым
https://raw.github.com/mlevin2/homebrew/116b43eaef08d89054c2f43579113b37b4a2abd3/Library/Formula/fswatch.rb
Смотрите этот SO ответ для использования.
watch
не работают с выводом цвета, и я не знаю, как это сделать. Вы можете создать свой собственный скрипт для эмуляции.
ОБНОВЛЕНИЕ: Оказывается, последние версии 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'