На странице руководства 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Документация HowTo/ChangeHostnameЭто должно помочь. Но, возможно, некоторые инструменты 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$ "