仅当从交互式 shell 调用时才输出彩色脚本

仅当从交互式 shell 调用时才输出彩色脚本

我制作了一个 bash 脚本,生成彩色输出。从交互式 shell 调用脚本时,颜色很好。但是,如果输出在另一个脚本中处理,或者通过管道传递,则它不应该被着色(我认为)。

通常如何处理这种情况?我应该提供一个选项来打开/关闭彩色输出,还是有办法在脚本中自动检测到这一点?最好它自动工作,我只需要最少的代码来输出彩色/非彩色,具体取决于脚本调用......

自动检测的一个问题似乎是脚本总是以非交互方式运行,因此我必须知道父 shell 的交互状态。

答案1

支持颜色输出(例如grepls)的 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

也就是说,如果您的输出是终端并支持颜色,并且用户尚未禁用它,您应该使用颜色。当然,用户使用alwaysnever跳过此检查。

我发现如果程序有 a--color=always即使它们支持自动检测,它也很有用,因为这意味着我可以“当我更了解时”强制使用颜色(假设我的目的地不是终端,但我知道它支持颜色)。在某些系统上,我有一个别名lsto ls --color=always

相关内容