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.

프롬프트에 OSX를 포함시키면 %2mOSX와 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 시스템에서 기본 호스트 이름을 반환하시겠습니까?

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

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

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

관련 정보