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 sh
ya da ksh
, benzetim zsh
değerlendirir $ENV
; böylece üstünüze ekleyebilir emulate zsh
ve şunları /path/to/file
yapabilirsiniz:
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
. $functions
işlev adlarını tanımlarıyla eşleyen özel bir ilişkilendirilebilir dizidir.
promptsubst
Seçeneği ile içindeki değişkenler $PS1
genişletilir. Böylece, ilk istemde, bu PS1'deki değişkenler genişletilecektir.
zsh_directory_name
Fonksiyon genişleyen yardımcı olan özel fonksiyondur ~foo
için /path/to/something
ters. Örneğin %~
komut isteminde kullanılır; böylece, geçerli dizin ise <=> eşlemesini yaparak /opt/myproj/proj/x
gö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:x
zsh_directory_name
proj:x
/opt/myproj/proj/x
D
${(D)somevar}
zsh_directory_name
Burada, kullandığınız ${(D):-}
, ${:-}
olduğunu ${no_var:-nothing}
için genişlediğinde nothing
ise $no_var
boştur, böylece ${(D):-}
arama sırasında hiçbir şey genişler zsh_directory_name
. zsh_directory_name
daha ö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 promptsubst
seçeneği (iptal etmek Yokedilecek -o promptsubst
,) zsh_directory_name()
(biz sadece bir kez çalıştırmak istediğiniz gibi) tanımsız edilecek $PS1
Yokedilecek ve /path/to/file
kaynaklı 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/file
unset
%m%#
PS1