Debian Linux에 문서화된 대로 ZSH %m 프롬프트 이스케이프가 작동하지 않습니다.

Debian Linux에 문서화된 대로 ZSH %m 프롬프트 이스케이프가 작동하지 않습니다.

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 없이 -fDebian 시스템에서 기본 호스트 이름을 반환합니까?

도메인 이름을 포함하도록 호스트 이름을 변경해 볼 수 있습니다. 데비안HowTo/ChangeHostname 문서그걸 도와야 해요. 하지만 일부 데비안 도구에서는 호스트 이름에 도메인 이름이 포함되어 있지 않다고 가정하므로 이는 좋지 않은 생각일 수 있습니다.

명령 대체를 사용하는 것이 더 합리적일 수 있습니다.

먼저 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$ "

관련 정보