我在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)
答案 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上的默认行为。
感谢你的帮助,它引导我做了很好的讲座:)