0

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

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

TL;DR:如何使用 xterm-256color 在 Konsole 中获得诸如 \033[1;30m 之类的转义码?

编辑:这是我正在谈论的 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)
4

2 回答 2

0

您给出的示例不依赖于TERM( 除非它在终端以外的其他地方,例如,通过一些解释它的程序,例如 ls 程序,它有自己的颜色概念) 的设置。如果您引用了使用转义序列的 makefile 部分,将会有所帮助。没有它,我们只能提供一般性的建议,例如。假设你echo在makefile中有一个命令。

开始查找的地方是您的 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 手册SHELL中的讨论。

反映对 make 版本的评论——众所周知,GNU make 4.0 与 3.81 有不兼容的更改,如LWN.net 上发布的线程 GNU Make 4.0中所述。特别是,有几条与您的问题有关的评论,从这里开始。

但是,检查最近的 Fedora,似乎问题确实在于默认行为echo已更改。正如在其他讨论中所指出的(例如,在 MacOSX 中使用 -e 参数时为什么不回显支持“\e”(转义)),这样做是为了提高 POSIX 兼容性。您可以通过向命令添加-e选项来恢复颜色echo

于 2015-03-21T11:29:59.147 回答
0

我终于找到了解决方案:

问题是我使用它echo而不是echo -eMac OSX 上的默认行为。

不过,感谢您的帮助,它使我获得了很好的演讲:)

于 2015-03-21T15:37:38.260 回答