Jestem zdezorientowany, że uprawnienia do wykonywania plików nie zachowują się zgodnie z oczekiwaniami. Prawdopodobnie dlatego, że moje oczekiwania są błędne. Tak czy siak:
Mam plik skryptu, bo dla uproszczenia właśnie się nazywa s, znajduje się w ~/bin. Na potrzeby tego przykładu plik zawiera tylko następujące wiersze:
#!/bin/zsh
echo "Test";
Bardzo prosty.
Przechodzę do ~/binkatalogu i chmoduprawnienia sdo pliku 400- tj. Tylko do odczytu tylko dla mnie. Brak uprawnień do wykonania. Następnie próbuję wykonać skrypt, wpisując jego ścieżkę, podając:
% ./s
zsh: permission denied: ./s
Jak na razie dobrze. Plik nie może zostać wykonany z powodu złych uprawnień. Zezwala się również na uprawnienia do blokowania 500(przyznane uprawnienia do wykonywania) - przy tych uprawnieniach plik działa poprawnie:
% ./s
Test
To wszystko zgodnie z oczekiwaniami. Ale potem chmodprzywracam uprawnienia do 400(ponownie uruchamiam uprawnienia), próbuję sourceplik i tak się dzieje:
% source s
Test
Chociaż uprawnienia są 400, skrypt wykonuje się.
Oto moje pytanie: dlaczego ./szawodzi (tak jak powinno), ale source swykonuje się normalnie? Czy nie narusza to całego celu zezwolenia na wykonanie?
Na 400uprawnienia, sh sa zsh stakże działa.
Jestem pewien, że gdzieś coś robię lub rozumiem coś okropnie nie tak. Może ktoś wskaż, gdzie mnie i wyjaśnić różnicę między ./s, source s, sh si zsh s?