根据 zsh 中的用户或 root 更改提示颜色

xen*_*ide 14 shell colors prompt zsh

在 zsh 中,您可以%#PS1(或任何PROMPT变量)中有一个,这基本上意味着%如果是用户则显示或#如果是 root则显示。我想知道是否有任何方法可以影响这一点,以便%#改变颜色取决于它是用户还是根用户(根为红色,用户为蓝色)显而易见的方法只是改变PS1我的根~/.zshrc但考虑这已经是一个特殊的符号了,我想知道是否可能没有一种方法可以PS1对两者使用相同的符号......特定%#于 zsh 的东西(我敢肯定还有其他的 hacks 我也可以这样做)一个 if then 语句)。

小智 8

%(!.%{\e[1;31m%}%m%{\e[0m%}.%{\e[0;33m%}%m%{\e[0m%})

如果您是 root,这应该可以将主机名 ( %m)更改为不同的颜色(红色)。我没有 zsh shell 来测试它,但它看起来是正确的。

原因如下:

%(x.true.false):: 根据三元第一项的评估,执行正确的语句。'!如果 shell 有特权,则为 true。实际上%#是 的捷径%(!.#.%)

%{\e[1;31m%} %m %{\e[0m%}:: the%{\e[X;Ym%}是以 X 作为格式(粗体、下划线等)和 Y 作为颜色代码的颜色转义序列。请注意,您需要打开和关闭要更改颜色的术语周围的序列,否则该点之后的所有内容都将是任何颜色。%m为了清楚起见,我在提示词周围添加了空格。

http://www.nparikh.org/unix/prompt.php有更多关于颜色表的选项和详细信息以及 zsh 的其他可用选项。


Gil*_*il' 7

autoload colors
colors
PS1="%~ %{%(#~$fg[red]~$fg[blue])%}%#%{$fg[default]%} "
Run Code Online (Sandbox Code Playgroud)

%(#测试 shell 是否以 root 身份运行。更改此设置以%(!测试 shell 是否以提升的权限运行(包括诸如 之类的内容newgrp,但不以 root 身份登录)。