O comando certo é
watch --color "ls -a1 --color"
Não está documentado na página man ou na tela --help. Eu tenho que usar strings para encontrá-lo.
De man watch
:
Non-printing characters are stripped from program output. Use "cat -v" as part of the command pipeline if you want to see them.
Então, como eu uso o cat -v
se eu quiser ver a saída colorida de:
watch ls -al --color
Eu acho que pode não ser possível com o comando 'watch'. Aqui está uma maneira mais longa de fazer isso:
while true; do clear; date;echo;ls -al --color; sleep 2; done
Você poderia colocar isso em um script, por exemplo:
echo "while true; do clear; date;echo;\$*;sleep 2; done" > watch2
chmod +x watch2
./watch2 ls -al --color
Para esclarecer, eis por que acho que não é possível com o comando 'watch'. Veja o que acontece se você usar cat -v:
watch "ls -al --color|cat -v"
Ele mostra os caracteres de controle de cores ... o que eu acho que não é o que você quer.
Se você estiver usando um Mac, como eu, o watch
do Homebrew não suporta cores.
O que você quer é fswatch mas ainda não é o Homebrew. Para instalá-lo, você vai querer fazer um pouco mais complicado
https://raw.github.com/mlevin2/homebrew/116b43eaef08d89054c2f43579113b37b4a2abd3/Library/Formula/fswatch.rb
Veja esta resposta SO para uso.
watch
não funciona com saída de cores e não sei como fazer isso. Você pode criar seu próprio script para simulá-lo.
UPDATE : as últimas versões do watch
corrigiram o problema. Então, se as cores de watch --color
estão erradas, provavelmente é melhor apenas atualizá-lo (no meu sistema, ele está no pacote procps
).
O suporte de cores em watch --color
é limitado em minha experiência (embora seja suficiente para ls -l --color
). Aqui está a minha versão da resposta do @ davr com alguns recursos extras, o mais importante é a redução da tremulação. Você pode colocá-lo em seu .bashrc e usá-lo como 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 '3[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;
}
Você também pode tentar coisas como
cwatch 'ls -l --color | head -n 'tput lines''
se o seu terminal tiver menos linhas que a saída. Isso só funciona se todas as linhas forem menores que a largura do terminal. A melhor solução que eu conheço para isso é:
cwatch 'let lines='tput lines'-2; ls -l --color | head -n $lines'