mientras que con ZDOTDIR, puede indicar zshque interprete un archivo llamado .zshrcen cualquier directorio de su elección, hacer que interprete cualquier archivo de su elección (no necesariamente llamado .zshrc) resulta bastante difícil.
En sho kshemulación, zshevalúa $ENV; para que puedas agregar emulate zshen la parte superior de tu /path/to/filey hacer:
ssh -t host 'zsh -c "ARGV0=sh ENV=/path/to/file exec zsh"'
Otro enfoque muy complicado puede ser:
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
Ese merece un poco de explicación.
${foo::=value}es una expansión variable que realmente establece $foo . $functionses una matriz asociativa especial que asigna nombres de funciones a sus definiciones.
Con la promptsubstopción, las variables $PS1se expanden. Entonces, en el primer aviso, las variables en esa PS1 se expandirán.
La zsh_directory_namefunción es una función especial que ayuda a expandir ay ~fooal /path/to/somethingrevés. Que se utiliza, por ejemplo, con %~la pronta por lo que si el directorio actual es /opt/myproj/proj/xque puede mostrarlo como ~proj:xpor tener zsh_directory_namehacer el mapeo proj:x<=> /opt/myproj/proj/x. Eso también lo usa la Dbandera de expansión de parámetros. Entonces, si uno se expande ${(D)somevar}, esa zsh_directory_namefunción se llamará.
Aquí, estamos usando ${(D):-}, ${:-}que se ${no_var:-nothing}expande a nothingsi $no_varestá vacío, por lo que se ${(D):-}expande a nada mientras se llama zsh_directory_name. zsh_directory_namese ha definido previamente como:
zsh_directory_name() {
set +o promptsubst
unset -f zsh_directory_name
unset PS1; . /path/to/file
}
Es decir, en la primera expansión de PS1 (en el primer aviso), ${(D):-}hará que la promptsubstopción se desactive (para cancelar -o promptsubst), zsh_directory_name()que no esté definida (ya que queremos ejecutarla solo una vez), $PS1que no se establezca y /path/to/fileque se obtenga.
${PS1=%m%# }se expande (y se asigna $PS1) a %m%#menos que PS1 ya esté definido (por ejemplo, /path/to/filedespués de unset), y %m%#resulta ser el valor predeterminado de PS1.