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
to /path/to/something
とreverseの展開に役立つ特別な関数です。これは、たとえば%~
現在のディレクトリが/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()
未定義(一度だけ実行したい)$PS1
として設定を解除し、/path/to/file
ソースを取得します。
${PS1=%m%# }
PS1が既に定義されていない場合(たとえば、後に)に展開(および割り当て$PS1
)し、%m%#
/path/to/file
unset
%m%#
たまたまのデフォルト値になりPS1
ます。