Beklediğim gibi davranmayan dosya izinlerini yürütme konusunda kafam karıştı. Muhtemelen beklentilerim yanlış olduğu için. Neyse:
Bir komut dosyası var, basitlik için sadece denir s
, bulunur ~/bin
. Bu örnek uğruna, dosya sadece aşağıdaki satırları içerir:
#!/bin/zsh
echo "Test";
Çok basit.
Ben gitmek ~/bin
dizine ve chmod
dosya izinleri s
için 400
- yani salt okunur sadece benim için. Yürütme izni yok. O zaman ben komut dosyasını yolunu girerek yürütmeyi deneyin, bu vererek:
% ./s
zsh: permission denied: ./s
Çok uzak çok iyi. Dosya yanlış izinler nedeniyle yürütülemiyor. 500
(İzin verilen yürütme) değerine kadar çarpma izinleri de iyi çalışır - bu izinlerle dosya iyi çalışır:
% ./s
Test
Bunların hepsi beklendiği gibi. Ama sonra chmod
geri izin 400
(tekrar kapalı izin yürütmek), source
dosyayı denemek ve bu olur:
% source s
Test
İzinler olmasına rağmen 400
, komut dosyası yürütülür.
Öyleyse sorum şu: neden ./s
başarısız oluyor (olması gerektiği gibi) ama source s
normal çalışıyor? Bu, yürütme izninin tüm amacını bozmaz mı?
At 400
izinleri sh s
ve zsh s
ayrıca çalışır.
Eminim ya bir yerlerde korkunç bir yanlışlık yapıyorum ya da anlıyorum. Birisi noktası dışarı nerede bana Can ve arasındaki farkı açıklamak ./s
, source s
, sh s
ve zsh s
?