Sono confuso riguardo all'esecuzione dei permessi dei file che non si comportano come mi aspetto. Probabilmente perché le mie aspettative sono sbagliate. Comunque:
Ho un file di script, per semplicità è appena chiamato s
, situato in ~/bin
. Per il bene di questo esempio, il file contiene solo le seguenti righe:
#!/bin/zsh
echo "Test";
Molto semplice.
Naviga verso la ~/bin
directory e chmod
le autorizzazioni di file di s
al 400
- vale a dire, in sola lettura per me solo. Nessuna autorizzazione di esecuzione. Quindi provo a eseguire lo script inserendone il percorso, dando questo:
% ./s
zsh: permission denied: ./s
Fin qui tutto bene. Il file non può essere eseguito a causa di autorizzazioni errate. Le autorizzazioni di bumping fino a 500
(esegui l'autorizzazione concessa) funzionano anche bene - con queste autorizzazioni, il file viene eseguito correttamente:
% ./s
Test
Questo è tutto come previsto. Ma poi chmod
riaccendo le autorizzazioni 400
(eseguo nuovamente le autorizzazioni), provo a source
inserire il file e questo succede:
% source s
Test
Sebbene le autorizzazioni siano 400
, lo script viene eseguito.
Quindi ecco la mia domanda: perché ./s
fallisce (come dovrebbe) ma source s
viene eseguito normalmente? Ciò non vanifica l'intero scopo del permesso di esecuzione?
Su 400
autorizzazioni sh s
e zsh s
anche lavorare.
Sono sicuro che sto facendo o capendo qualcosa di orribilmente sbagliato da qualche parte. Può qualcuno punto dove a me, e spiegare la differenza tra ./s
, source s
, sh s
e zsh s
?