Bu "sanki" bir kuraldır.
Basitçe söylemek gerekirse: Bir uygulama, standart bir harici komutun yerleşik kabuk olarak da kullanılabilir hale getirilmesine karar verirse, kullanıcıların gördüğü şekliyle kabuğun davranışı değişmemelidir.
Https://unix.stackexchange.com/a/496291/5132 adresinde , bir yandan PD Korn, MirBSD Korn ve Heirloom Bourne mermilerinin davranışları arasında gösterdiğim kontrast ; (diğer yandan) Z, 93 Korn, Yine Bourne ve Debian Almquist mermileri; ve (sürükleyici elden) Watanabe kabuğu bunu vurgular.
Yok kabukları için printf
bir yerleşik çıkarmadan /usr/bin
gelen PATH
bir çağırma yapar printf
çalışmamaya. Watanabe kabuğunun uygun modda sergilediği POSIX uyum davranışı aynı sonuca neden olur. Bir sahiptir kabuğun davranış printf
yerleşik olduğu gibi harici bir komutu çağırarak bulundu.
Olmayan uyumlu tüm kabukların davranışı Oysa eğer değiştirmez /usr/bin
kaldırılır PATH
ve onlar do not onlar harici komutu çağırarak sanki davranır.
Standardın size garanti etmeye çalıştığı şey, mermilerin normalde harici komutların her türünü oluşturabilmesi (veya bunları kendi kabuk işlevleri olarak uygulayabilmesidir) ve yine de yerleşiklerden yaptığınızla aynı davranışı elde edersiniz. komutların PATH
bulunmasını durdurmak için ayar yaparsanız harici komutlarla . PATH
hangi komutları çağırabileceğinizi seçmek ve kontrol etmek için aracınız kalır.
( Https://unix.stackexchange.com/a/448799/5132 adresinde açıklandığı gibi , yıllar önce insanlar olanları değiştirerek Unix'lerinin kişiliğini seçtiler PATH
.)
Komutun bulunup bulunamayacağına bakılmaksızın her zaman çalışmasını PATH
sağlamak aslında normalde harici komutları yerleşik hale getirme noktasıdır . (Bu yüzden nosh araç setim printenv
aslında 1.38 sürümünde yerleşik bir komut kazandı . Bu bir kabuk olmamasına rağmen .)
Ancak standart size, işlevi başlatan diğer kabuk dışı programlardan göreceğiniz gibi kabuktan alınmayan normal harici komutlar için aynı davranışı göreceğinizi garanti eder ve kabuk sihirli bir şekilde yapamaz. diğer programların bulamadığı sıradan harici komutları çalıştırın (görünüşte) . Her şey kullanıcının bakış açısından kendi kendine tutarlı bir şekilde çalışır ve nasıl çalıştığını kontrol etmek için bir araçtır.PATH
execvpe()
PATH
PATH
daha fazla okuma