ZSH %m 提示转义在 Debian Linux 下无法正常工作

ZSH %m 提示转义在 Debian Linux 下无法正常工作

zshmisc我的新 Debian Squeeze 安装的手册页如下SIMPLE PROMPT ESCAPES

%m
The hostname up to the first `.'. An integer may follow the '%' to specify how
many components of the hostname are desired. With a negative integer, trailing
components of the hostname are shown.

当我将其包含%2m在提示符中时,我发现 OSX 和 Linux 之间存在不同的行为。

在 OSX (10.7.3) 上,运行 zsh 4.3.11,提示符的行为符合预期,显示系统主机名的两个主要部分。

在 Debian 上,运行 zsh 4.3.10,提示符仍然只显示裸主机名。hostname -f在此系统上确认完整主机名设置正确。另请注意,此 zsh 版本的联机帮助页表示应支持 %2m。

有人对从哪里开始调试有什么建议吗?

答案1

快速浏览一下 zsh提示处理源码建议这%m基于您的系统为gethostname系统调用返回的内容。这就像hostname没有-f选择的情况下跑步一样。

我假设正在跑步hostname 没有 -f返回 Debian 系统上的裸主机名?

您可以尝试更改主机名以包含域名。 Debian如何/更改主机名文档应该对此有所帮助。但也许某些 Debian 工具会假设您的主机名不包含域名,因此这可能是一个坏主意。

仅使用命令替换可能更有意义。

首先设置PROMPT_SUBST选项

setopt PROMPT_SUBST

然后您可以运行任何命令并将其输出放入提示符中,如下所示:

PS1='$(hostname -f)$ '

要仅获取主机名的前几个部分,您可以使用cut,例如

PS1='$(hostname -f | cut -f 1-2 -d .)$ '

因为您的主机名不应该更改,所以您还可以通过仅运行命令一次并将其存储在变量中,然后使用该变量来提高效率,例如

HOSTANDSUBDOMAIN="$(hostname -f | cut -f 1-2 -d .)"
PS1="$HOSTANDSUBDOMAIN$ "

相关内容