De man watch:
Los caracteres que no se imprimen se eliminan de la salida del programa. Use "cat -v" como parte de la canalización de comandos si desea verlos.
Entonces, ¿cómo lo uso cat -vsi quiero ver la salida en color de:
watch ls -al --color
De man watch:
Los caracteres que no se imprimen se eliminan de la salida del programa. Use "cat -v" como parte de la canalización de comandos si desea verlos.
Entonces, ¿cómo lo uso cat -vsi quiero ver la salida en color de:
watch ls -al --color
Respuestas:
El comando correcto es
watch --color "ls -a1 --color"
No está documentado en la página de manual o en la pantalla de ayuda. Tengo que usar cadenas para encontrarlo.
watch --color "sudo iwlist wlan0 scanning | egrep 'Quality|ESSID' | egrep --color -i 'foobar|$'"comerán los colores :(
watchde procps (el valor por defecto en la mayoría de distribuciones de Linux, creo) tiene una --coloropción ya V3.3.2.
Creo que puede no ser posible con el comando 'watch'. Aquí hay una forma más larga de hacerlo:
while true; do clear; date;echo;ls -al --color; sleep 2; done
Podría poner esto en un script, por ejemplo:
echo "while true; do clear; date;echo;\$*;sleep 2; done" > watch2
chmod +x watch2
./watch2 ls -al --color
Para aclarar, he aquí por qué creo que no es posible con el comando 'watch'. Vea lo que sucede si usa cat -v:
watch "ls -al --color|cat -v"
Te muestra los caracteres de control de color ... que creo que no es lo que quieres.
man watchsugiere claramente que debería ser posible sin disimular watch.
cat -vpara ver de qué man watchestaba hablando.
while true; do out=$(date;echo;ls -al --color);clear;echo $out;sleep 2;done
echo "$out". stackoverflow.com/q/2414150/86967
Si está utilizando una Mac, como yo, watchde Homebrew no es compatible con el color.
Lo que quieres es fswatch pero aún no es Homebrew. Para instalarlo, querrás hacer un poco más complicado
https://raw.github.com/mlevin2/homebrew/116b43eaef08d89054c2f43579113b37b4a2abd3/Library/Formula/fswatch.rb
Vea esta respuesta SO para su uso.
watchaplica a un comando
ACTUALIZACIÓN : Resulta las últimas versiones de watchsolucionado el problema. Entonces, si los colores watch --colorson incorrectos, probablemente sea mejor simplemente actualizarlo (en mi sistema, está en el procpspaquete).
El soporte de color watch --colores limitado en mi experiencia (aunque suficiente para ls -l --color). Aquí está mi versión de la respuesta de @ davr con algunas características adicionales, el parpadeo más importante reducido. Puede ponerlo en su .bashrc y usarlo 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;
}
También puedes probar cosas como
cwatch 'ls -l --color | head -n `tput lines`'
si su terminal tiene menos líneas que la salida. Sin embargo, eso solo funciona si todas las líneas son más cortas que el ancho del terminal. La mejor solución que conozco para eso es:
cwatch 'let lines=`tput lines`-2; ls -l --color | head -n $lines'