Mur*_*iar 2 prompt zsh hostname
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.
Run Code Online (Sandbox Code Playgroud)
当我包含%2m
在我的提示中时,我看到 OSX 和 Linux 之间的不同行为。
在 OSX (10.7.3) 上,运行 zsh 4.3.11,提示的行为符合预期,显示系统主机名的两个主要部分。
在 Debian 上,运行 zsh 4.3.10,提示仍然只显示裸主机名。hostname -f
在此系统上确认完整的主机名设置正确。另请注意,此 zsh 版本的联机帮助页表示应支持 %2m。
有没有人对从哪里开始调试这个有任何建议?
快速查看 zsh 的提示处理源代码表明这%m
是基于您的系统为gethostname
系统调用返回的内容。这就像在hostname
没有-f
选择的情况下运行。
我假设在 Debian 系统上运行时hostname
不 -f
返回裸主机名?
您可以尝试更改您的主机名以包含域名。Debian HowTo/ChangeHostname 文档应该对此有所帮助。但也许某些 Debian 工具假定您的主机名不包含域名,因此这可能是一个坏主意。
仅使用命令替换可能更有意义。
首先设置 PROMPT_SUBST 选项
setopt PROMPT_SUBST
Run Code Online (Sandbox Code Playgroud)
然后你可以运行任何命令并将其输出放在提示中,如下所示:
PS1='$(hostname -f)$ '
Run Code Online (Sandbox Code Playgroud)
要仅获取主机名的第一个但很多部分,您可以使用cut
,例如
PS1='$(hostname -f | cut -f 1-2 -d .)$ '
Run Code Online (Sandbox Code Playgroud)
因为你的主机名不应该改变,你也可以通过只运行一次命令并将其存储在一个变量中,然后使用该变量来提高效率,例如
HOSTANDSUBDOMAIN="$(hostname -f | cut -f 1-2 -d .)"
PS1="$HOSTANDSUBDOMAIN$ "
Run Code Online (Sandbox Code Playgroud)