我使用一些命令来显示颜色,但是当我在watch命令中使用它们时,颜色会消失:
watch -n 1 node file.js
有没有办法重新显示出颜色?
watch
现在支持颜色。watch --color ls -ahl --color
。
相关链接。watch
内运行的命令检测到它未连接到终端,您需要强制输出颜色。以下是一些示例:CLICOLOR_FORCE=1 watch --color ls -ahl # MacOS
watch --color ls -ahl --color=always # Ubuntu
对于ls
和其他程序,您可能需要进行其他配置,但即使您不使用watch
,也会显示出来。
watch
命令查看 git diff
的结果。顺便提一下,为了让它正常工作,你需要在执行 git diff
命令时传入 --color=always
参数(例如:watch --color git diff --color=always
)。 - theabrahamgit status
命令时通过watch
显示颜色,需要使用以下命令:watch --color git -c color.status=always status
。请参考此处链接的答案:https://unix.stackexchange.com/a/47065/268780。 - Yuri Feldman请勿使用watch
命令......当您使用watch命令时,程序会检测到它们没有写入终端,并将去除颜色。您必须使用特定的程序标志来保留控制代码。
如果您不知道这些标志或者没有这样的标志,你可以通过以下方法创建一个简单的watch命令替代品:
while sleep <time>; do clear; <command>; done
这款手表会有一点闪烁(手表采用“双缓冲”),但对于某些情况下,它还是足够有用的。
你可能会尝试使用双缓冲技术制作一个简易手表。
while sleep <time>; do <command> > /tmp/file; clear; cat /tmp/file; done
然后你会再次遇到“我不是在写入终端”的功能。
watch
的颜色代码,并且不会防止命令闪烁。 - theistwhile sleep <时间> ; do x="$( <命令> 2>&1 )" ; clear ; echo "$x" ; done
-- 它只使用shell内置函数来清除屏幕和显示输出,因此是最不闪烁的替代方案。 - Géza Törökls --la
(在我的设置中默认添加颜色),ls | grep foo
,grep ^ *
和 bundle exec knife status
都无法正常工作,但是对于 ls --color
可以正常工作,可能是因为 --color
强制使用颜色代码。 - theist虽然其他答案解决了这个问题,但最简单的方法是使用unbuffer
工具。只需执行以下操作即可:
$ watch --color 'unbuffer <your-program>'
这样您就无需搜寻程序的控制序列启用标志。不过,需要注意的是您的 watch 版本需支持 --color
标志。
您可以使用 sudo apt-get install expect
在 Debian 或 Ubuntu 上安装 unbuffer。
brew install expect
。 - ijosephwatch
的基本操作,不需要花哨的功能。$ cat cheapwatch
#!/bin/sh
# Not quite your Rolex
while true ; do
clear
printf "[%s] Output of %s:\n" "$(date)" "$*"
# "$@" <- we don't want to do it this way, just this:
${SHELL-/bin/sh} -c "$*"
sleep 1 # genuine Quartz movement
done
$ ./cheapwatch ls --color # no problem
tr
命令嵌入到这个脚本中,以剥离控制字符,然后强制用户使用 --color
来禁用该逻辑。目前,这种实现的天真程度使得吞噬颜色的怪物远离它。--color
选项并且由于某种原因不能升级包的情况下,也许你可以尝试使用这个方法。是的
watch命令支持彩色输出。 它是procps包的一部分(至少在debian中是这样) 这里是一个关于你问题的bug报告http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=129334 他们的回答是,你应该更新procps包。
例如,在ubuntu 11.04中,可以使用这个包 http://packages.debian.org/wheezy/procps
简而言之
更新procps
如果命令没有强制输出彩色的选项,其他答案可能无效。或者您可能像我一样懒,不想为每个命令浏览手册以找到正确的设置。我尝试了几种不同的技术:
script
命令script
命令会捕获交互式终端会话运行的输出。结合watch
命令的--color
参数,它可以保留颜色:
watch --color "script -q -c '<command>' /dev/null"
-q
代表安静模式,-c
代表命令,/dev/null
是日志文件,不需要作为 stdout 已经显示了输出。
编辑:这是迄今为止最好的选择,我将早期的解决方案保留下来给有兴趣的人。
正如一些人建议的那样,可以使用带有 clear
和 sleep
的简单 while 循环在终端中运行命令而不捕获其输出。这通常会导致闪烁,因为 clear
删除所有字符,然后命令需要一些时间逐行打印新的输出。
幸运的是,你可以使用一些巧妙的终端技巧,使用 tput
在写入新内容时保留旧的输出可见。
以下是脚本:
#!/bin/sh
trap "tput cnorm" EXIT # unhide the cursor when the script exits or is interrupted
# simple interval parameter parsing, can be improved
INTERVAL=2s
case $1 in
-n|--interval)
INTERVAL="$2"
shift; shift
;;
esac
clear # clear the terminal
tput civis # invisible cursor, prevents cursor flicker
while true; do
tput cup 0 0 # move cursor to topleft, without clearing the previous output
sh -c "$*" # pass all arguments to sh, like the original watch
tput ed # clear all to the end of window, if the new output is shorter
sleep "$INTERVAL"
done
watch
显示taskboard(https://github.com/klaussinani/taskbook)任务,这很有帮助。 - Arpan Srivastava来自手表使用手册:
程序输出中的非打印字符会被过滤掉。如果您想看到它们,请在命令管道中使用 "cat -v"。
但是,我不确定该如何使用它。
watch -c "ls --color|cat -v"
对于第一行显示为 ^[[0m^[[01;34mAgent^[[0m
。 - Drew Noakeswatch --color ls --color=always .
命令。 - Zhang LongQI