bash 列命令被 ANSI 颜色转义混淆

sca*_*nny 8 centos cygwin bash

我有一个来自 Gary Bernhardt 的 dotfiles 的 bash 脚本,它打印了最近 git 提交的漂亮彩色列表。它使用该column命令将输出排列成列。在我的 Mac 上,它运行得非常好。

然而奇怪的是,当我在 Cygwin 或 CentOS 6 上运行它时,列位不起作用。所有字段之间都有三个空格,无论它们的长度如何,都会在“列”之间产生锯齿状的排水沟。我已将其范围缩小到 ANSI 颜色转义码。如果我删除这些,列会排成一列。

zsh 版本在所有三个上都相同(并且问题在 bash 中的出现方式完全相同)。我不知道是什么版本column,但它们看起来完全一样,而且它们的手册页对于任何有价值的东西都是一样的。

为什么这适用于我的 Mac 而不适用于其他操作系统?

小智 0

可能该column命令查看$TERM和/或$LANG查看什么(如果有)构成颜色代码。

当然,您可以首先使用git log --pretty=format:...输出列对齐的颜色编码日志。例如,我使用git hist并在我的~/.git/config

[alias]
   hist = log --pretty=format:\"           \t%C(yellow)%h %C(red)%ad %C(cyan)%aN%C(reset)   \t| %s%C(blue)%d%C(reset)\" --graph --date=short
Run Code Online (Sandbox Code Playgroud)