ZDOTDIR을 사용하면 선택한 디렉토리에서 zsh
호출 .zshrc
된 파일을 해석하도록 말할 수 있지만 선택한 파일 (반드시 호출되지는 않음)이 해석 .zshrc
하기가 매우 어렵다는 것을 알 수 있습니다.
에서 sh
또는 ksh
, 에뮬레이션 zsh
평가됩니다 $ENV
; 그래서 당신은 당신 emulate zsh
의 상단에 추가 할 수 있습니다 /path/to/file
:
ssh -t host 'zsh -c "ARGV0=sh ENV=/path/to/file exec zsh"'
매우 복잡한 다른 접근 방식은 다음과 같습니다.
ssh -t host 'PS1='\''${${functions[zsh_directory_name]::="
set +o promptsubst
unset -f zsh_directory_name
unset PS1
. /path/to/file
"}+}${(D):-}${PS1=%m%# }'\' exec zsh -o promptsubst -f
그것은 약간의 설명이 필요합니다.
${foo::=value}
실제로 설정 하는 변수 확장입니다 $foo
. $functions
함수 이름을 정의에 매핑하는 특수 연관 배열입니다.
이 promptsubst
옵션을 사용하면 변수 $PS1
가 확장됩니다. 따라서 첫 번째 프롬프트에서 해당 PS1의 변수가 확장됩니다.
zsh_directory_name
기능은 확장하는 데 도움이되는 특별한 함수 ~foo
에 /path/to/something
그 반대. 예를 들어 %~
프롬프트에서 와 같이 사용 되므로 현재 디렉토리가 /opt/myproj/proj/x
있으면 매핑 <=> ~proj:x
을 zsh_directory_name
수행하는 것처럼 표시 할 수 있습니다 . 또한 매개 변수 확장 플래그 에서도 사용됩니다 . 따라서 하나가 확장 되면 해당 함수가 호출됩니다.proj:x
/opt/myproj/proj/x
D
${(D)somevar}
zsh_directory_name
여기, 우리가 사용하고있는 ${(D):-}
, ${:-}
이라고 ${no_var:-nothing}
확장되어 nothing
있는 경우 $no_var
비어있는, 그래서 ${(D):-}
호출하는 동안 아무것도로 확장됩니다 zsh_directory_name
. zsh_directory_name
이전에 다음과 같이 정의되었습니다.
zsh_directory_name() {
set +o promptsubst
unset -f zsh_directory_name
unset PS1; . /path/to/file
}
즉, (프롬프트 처음시) 첫 PS1 확장에 따라, ${(D):-}
원인이됩니다 promptsubst
옵션합니다 (을 취소하는 설정이 해제 -o promptsubst
) zsh_directory_name()
(우리는 한 번만 실행하려는로) undefined로 $PS1
설정이 해제하고, /path/to/file
공급한다.
${PS1=%m%# }
팽창 (및 양수인 $PS1
에) %m%#
PS1 이미 (에 의해 인스턴스에 대해 정의하지 않는 한 /path/to/file
애프터 unset
), 그리고 %m%#
발생은 기본 값이 될 수 있습니다 PS1
.