De man watch
:
Caracteres não imprimíveis são removidos da saída do programa. Use "cat -v" como parte do pipeline de comandos, se quiser vê-los.
Então, como usar cat -v
se eu quiser ver a saída colorida de:
watch ls -al --color
De man watch
:
Caracteres não imprimíveis são removidos da saída do programa. Use "cat -v" como parte do pipeline de comandos, se quiser vê-los.
Então, como usar cat -v
se eu quiser ver a saída colorida de:
watch ls -al --color
Respostas:
O comando certo é
watch --color "ls -a1 --color"
Não está documentado na página do manual ou na tela --help. Eu tenho que usar cordas para encontrá-lo.
watch --color "sudo iwlist wlan0 scanning | egrep 'Quality|ESSID' | egrep --color -i 'foobar|$'"
vai comer as cores :(
watch
from procps (o padrão na maioria das distribuições Linux, acredito) tem uma --color
opção desde a V3.3.2.
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ê pode 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 porque eu 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ê deseja.
man watch
sugere claramente que isso deve ser possível sem discordar watch
.
cat -v
para ver o que man watch
estava falando.
while true; do out=$(date;echo;ls -al --color);clear;echo $out;sleep 2;done
echo "$out"
. stackoverflow.com/q/2414150/86967
Se você estiver usando um Mac, como eu, o watch
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
se aplica a um comando
UPDATE : Acontece que as versões mais recentes do watch
problema foram corrigidas. Portanto, se as cores de watch --color
estão erradas, provavelmente é melhor atualizá-lo (no meu sistema, está no procps
pacote).
O suporte de cores watch --color
é limitado em minha experiência (embora suficiente para ls -l --color
). Aqui está a minha versão da resposta do @ davr com alguns recursos extras, o mais importante é o flicker reduzido. Você pode colocá-lo no 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 '\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;
}
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 mais curtas que a largura do terminal. A melhor solução que conheço é:
cwatch 'let lines=`tput lines`-2; ls -l --color | head -n $lines'