Bash 설정에서는 다음을 $HOSTNAME
사용하여 프롬프트 줄의 전체 길이를 간단히 계산할 수 있습니다.
PS1_length=$((${#USER}+${#HOSTNAME}+${#PWDNAME}+12+${#PS1_GIT}))
예를 들어, 다음과 같은 채우기 선을 만들 때 유용합니다.
그러나 zsh
올바르게 설정할 수 없으며 $HOSTNAME
비슷한 동작을 시뮬레이션하는 방법이 생각나지 않습니다. 어떤 아이디어가 있습니까?
답변1
당신은 설정해야
HOSTNAME=$(hostname)
당신의~/.zshrc
또는 Caleb이 지적했듯이 변수 HOST 설정이 있으므로 프롬프트를 이식 가능하게 유지하려면 다음을 수행할 수도 있습니다.
HOSTNAME=$HOST
답변2
zsh
프롬프트 확장을 사용하면 계산을 수행하지 않고 프롬프트를 실행할 수 있습니다.
PS1='%$COLUMNS>╡>%F{cyan}╔╡%F{red}[%n]%F{cyan}:%F{yellow}[%m]%F{cyan}➾%F{green}[%~]%F{default}$PS1_GIT%F{cyan}${(l:COLUMNS::═:):-}%<<
╚═╡%F{default}'
설명하다:
%$COLUMNS>╡>
: 다음 이전 부분으로 오른쪽이 잘립니다($COLUMNS
단말기 너비에 따라 동적으로 설정된 변수).zsh
%<<
%F{color}
:전경색 설정%n
,%m
,%~
: 사용자 이름, 컴퓨터 이름(호스트 이름의 첫 번째 점까지), 현재 디렉터리(~
-named-dirs 포함).${(l:COLUMNS::═:):-}
: 빈 문자열 왼쪽(${:-}
) 을 채워$COLUMNS
문자 길이를 채웁니다═
.
%m
처럼 ${HOST%%.*}
. 전체 호스트 이름( $HOST
)이 필요한 경우 을 사용하세요 %M
.
답변3
잘못된 변수 이름을 사용했습니다. 환경 $HOSTNAME
변수는 일반적으로 호스트 시스템의 init 루틴에 의해 설정되지만 항상 그런 것은 아닙니다. ZSH 구성 파일의 컨텍스트에서는 $HOST
셸에서 명시적으로 설정한 환경 변수를 사용해야 합니다. 에서 man zshall
:
쉘에 의해 설정된 매개변수
[…]
HOST 현재 호스트 이름입니다.
ZSH는 해당 목록에 이를 설정하려고 시도하지 않으며 $HOSTNAME
시스템 초기화 시스템의 변덕에 따라 설정하거나 설정하지 않을 뿐입니다.
또한 $HOST
다른 쉘로의 이식성을 원하는 경우 크로스 플랫폼 쉘 스크립트에서 이것을 사용해서는 안 되지만(이 경우 hostname
바이너리가 아마도 최선의 선택일 것임) ZSH 구성 파일의 맥락에서 쉘 자체 변수 사용하는 것이 가장 중요합니다.