ZDOTDIR ile seçtiğiniz herhangi bir dizinde zshçağrılan bir dosyayı yorumlamayı söyleyebilir .zshrc, seçtiğiniz herhangi bir dosyayı yorumlaması (zorunlu olarak çağrılmaması .zshrc) oldukça zor olur.
Olarak shya da ksh, benzetim zshdeğerlendirir $ENV; böylece üstünüze ekleyebilir emulate zshve şunları /path/to/fileyapabilirsiniz:
ssh -t host 'zsh -c "ARGV0=sh ENV=/path/to/file exec zsh"'
Çok kıvrımlı bir başka yaklaşım şöyle olabilir:
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
Bu biraz açıklamayı hak ediyor.
${foo::=value}aslında ayarlanan değişken bir genişletmedir $foo. $functionsişlev adlarını tanımlarıyla eşleyen özel bir ilişkilendirilebilir dizidir.
promptsubstSeçeneği ile içindeki değişkenler $PS1genişletilir. Böylece, ilk istemde, bu PS1'deki değişkenler genişletilecektir.
zsh_directory_nameFonksiyon genişleyen yardımcı olan özel fonksiyondur ~fooiçin /path/to/somethingters. Örneğin %~komut isteminde kullanılır; böylece, geçerli dizin ise <=> eşlemesini yaparak /opt/myproj/proj/xgörüntüleyebilirsiniz . Bu, parametre genişletme bayrağı tarafından da kullanılır . Eğer biri genişlerse , o fonksiyon çağrılır.~proj:xzsh_directory_nameproj:x/opt/myproj/proj/xD${(D)somevar}zsh_directory_name
Burada, kullandığınız ${(D):-}, ${:-}olduğunu ${no_var:-nothing}için genişlediğinde nothingise $no_varboştur, böylece ${(D):-}arama sırasında hiçbir şey genişler zsh_directory_name. zsh_directory_namedaha önce şu şekilde tanımlanmıştı:
zsh_directory_name() {
set +o promptsubst
unset -f zsh_directory_name
unset PS1; . /path/to/file
}
Olduğunu, (istemi üzerine ilk) ilk PS1 genişlemesi üzerine, ${(D):-}neden olacaktır promptsubstseçeneği (iptal etmek Yokedilecek -o promptsubst,) zsh_directory_name()(biz sadece bir kez çalıştırmak istediğiniz gibi) tanımsız edilecek $PS1Yokedilecek ve /path/to/filekaynaklı edilecek.
${PS1=%m%# }PS1 önceden tanımlanmadığı sürece (örneğin, sonrasına kadar ) öğesini genişletir (ve atar $PS1) ve varsayılan değeri olur .%m%#/path/to/fileunset%m%#PS1