ZSH %m prompt escape не работает, как описано в Debian Linux

ZSH %m prompt escape не работает, как описано в 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Документация 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$ "

Связанный контент