颜色termcaps Konsole?

时间:2015-03-21 10:36:51

标签: colors terminal ansi-escape termcap

我在OpenSuse 13.2的终端上遇到ANSI转义码问题。 我的Makefile用于在工作时在OSX上显示漂亮的颜色,但在我使用它的时候在家里我得到了诸如\ 033 [1; 30m ... \ 033 [0m

我对termcaps几乎一无所知,我刚刚发现这些转义字符似乎工作得很好!最奇怪的是我的OSX和Linux终端都配置了TERM = xterm-256color,所以我真的不知道在哪里寻找我目前在Linux上缺少的正确设置。

TL; DR:如何获取转义代码,例如\ 033 [1; 30m在Konsole中使用xterm-256color?

编辑:这是我正在讨论的Makefile的片段: \这里是我正在谈论的Makefile的片段:

# Display settings
RED_L = \033[1;31m
GREEN_L = \033[1;32m
GREEN = \033[0;32m
BLUE = \033[0;34m
RED = \033[0;31m

all: $(OBJ_DIR) $(NAME)

$(OBJ_DIR):
        @mkdir -p $(OBJ_DIR)

$(NAME): $(OBJ)
        @echo "$(BLUE)Linking binary $(RED)$(NAME)$(BLUE).\n"
        @$(CC) -o $@ $^ $(LFLAGS)
        @echo "\t✻ $(GRAY)$(CC) -o $(RED)$(NAME)$(GRAY) object files:$(GREEN) OK! √\n$(NC)

2 个答案:

答案 0 :(得分:0)

您提供的示例不依赖于TERM的设置(除非它在终端之外的某个位置,例如,通过一些解释它的程序,例如ls程序,它有自己的概念关于colors)。如果你引用使用转义序列的makefile部分会有所帮助。没有它,我们只能提供通用建议,例如。假设你在makefile中有一个echo命令。

开始查看的地方是你的makefile使用的 shell 。人们会期望 bash 成为OpenSUSE的默认shell。但是假设您实际上正在使用其他一些shell,它碰巧无法识别您正在使用的语法,并尝试执行类似

的操作
echo '\033[1;34mhello\033[m'

为了确保您使用预期的shell,您可以在makefile中放置一个赋值,例如,

SHELL = /bin/sh

这假设/bin/sh本身将按预期工作。但是,这通常是真实 shell的符号链接(对于Linux)。如果是这样,一个可能的解决方案是使用OpenSUSE的update-alternatives功能更改真实的shell,将shell更改为bash(或zsh)。

有关其他信息,请参阅GNU make manual中对SHELL的讨论。

反映对make版本的评论 - 已知GNU make 4.0与3.81有不兼容的更改,如LWN.net上的线程 GNU Make 4.0 released 所述。特别是,从here开始,有几条与您的问题相关的评论。

然而,检查最近的Fedora,似乎问题确实是echo的默认行为已经改变。正如其他讨论中所述(例如Why doesn't echo support “\e” (escape) when using the -e argument in MacOSX),这样做是为了改善POSIX兼容性。您可以通过在-e命令中添加echo选项来恢复颜色。

答案 1 :(得分:0)

我终于找到了解决方案:

问题是我使用的是echo而不是echo -e,这似乎是Mac OSX上的默认行为。

感谢你的帮助,它引导我做了很好的讲座:)