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関数は、~footo /path/to/somethingとreverseの展開に役立つ特別な関数です。これは、たとえば%~現在のディレクトリが/opt/myproj/proj/xマッピング<=> ~proj:xをzsh_directory_name実行することで表示できるようにします。これは、パラメーター展開フラグでも使用されます。したがって、を展開すると、その関数が呼び出されます。proj:x/opt/myproj/proj/xD${(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/fileunset%m%#たまたまのデフォルト値になりPS1ます。