为什么 OS X Lion 的终端处理 PS1 提示代码的方式与 Snow Leopard 不同?

为什么 OS X Lion 的终端处理 PS1 提示代码的方式与 Snow Leopard 不同?

在 Snow Leopard 和 Lion 中,对于相同的提示定义,我在终端中得到了不同的行为。

在我的 Snow Leopard 系统上,我在 .profile 中定义我的终端提示符如下:

export PS1='\[\e[32;1m\]\w\$\[\e[0m\] '

这将创建一个黑底绿字提示符,而普通命令的输出默认为黑底白字。(例如,如果我输入男人我得到了输出您想要什么手册页?黑底白字。)

在我的 Lion 系统上,使用相同的 .profile,我得到了相同的黑底绿字提示,但文本颜色不再切换回黑底白字。(如果我输入男人我得到了输出您想要什么手册页?与提示符一样,采用黑底绿字。)

为什么 Lion 的终端行为不同——以及如何让它将文本改回黑底白字?

答案1

处理提示设置的更好方法(因为它在升级和不同系统之间更易于移植)是使用 tput 和 terminfo 代码来始终获取适合您的术语类型的正确代码。手册页中写道“使用 terminfo 数据库使终端相关功能和信息的值可供 shell 使用”

以下是我的 .profile 中的一个示例

red=$(tput setaf 1)
green=$(tput setaf 2)
blue=$(tput setaf 4)
reset=$(tput sgr0)
PS1="\[$red\]\u\[$reset\]@\[$green\]\h\[$reset\]:\[$blue\]\w\[$reset\]\$ "

从 terminfo 手册页中可以看到 setaf 的代码是

   set_a_foreground             setaf       AF       Set foreground
                                                     color to #1, using
                                                     ANSI escape

查看tput(1)更多terminfo(5)关于你可以用它做什么。

答案2

简而言之,据我所知,根本没什么区别。问题始终在于我的终端偏好设置将基本文本颜色设置为亮绿色!

相关内容