我制作了一个bash脚本,生成彩色输出。当从交互式shell调用脚本时,颜色是很好的。但是,如果在另一个脚本中处理输出,或者通过管道传递输出,则不应该对输出进行着色(我认为)。
这通常是怎么处理的?我应该提供一个选项来打开/关闭有色输出,还是有一种方法可以在脚本中自动检测到这一点?最好它能自动工作,我只需要最少的代码输出有色/非彩色,这取决于脚本调用.
自动检测的一个问题似乎是脚本总是运行非交互式的,所以我必须知道父shell的交互状态。
发布于 2012-12-30 00:02:47
支持颜色输出(如grep和ls)的unix应用程序通常有命令行选项以及可能的自动检测。
看着man ls我们看到
--color[=WHEN]
colorize the output. WHEN defaults to `always' or can be `never' or `auto'. More info below因此,默认情况下ls将始终使用颜色,注意auto选项。
man grep显示出类似的情况
--color[=WHEN], --colour[=WHEN]
<snipped> WHEN is never, always, or auto.如果启用了auto选项(对于您的应用程序来说,这个选项可能是默认的),那么下面的答案(由吉尔斯建议)可能是您正在寻找的https://unix.stackexchange.com/a/10065/4635
也就是说,如果您的输出是一个终端,并且支持颜色,而且用户还没有禁用它,那么您应该使用颜色。当然,使用always或never的用户跳过此检查。
我发现如果程序有一个--color=always,即使它们支持自动检测,也是有用的,因为这意味着我可以强制使用颜色‘当我更清楚的时候’(假设我的目的地不是终端,但我知道它支持颜色)。在某些系统上,我为ls到ls --color=always提供了一个别名。
https://unix.stackexchange.com/questions/59802
复制相似问题