从man watch
:
非打印字符将从程序输出中删除。如果想查看它们,请使用“cat -v”作为命令管道的一部分。
cat -v
那么如果我想查看彩色输出,该如何使用:
watch ls -al --color
答案1
正确的命令是
watch --color "ls -a1 --color"
它没有记录在手册页或 --help 屏幕中。我必须使用字符串来找到它。
答案2
我认为使用“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
为了澄清起见,以下是我认为使用“watch”命令无法实现的原因。看看使用 cat -v 会发生什么:
watch "ls -al --color|cat -v"
它向您显示了颜色控制字符……我认为这不是您想要的。
答案3
答案4
更新:事实证明,最新版本已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'