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 ~/bindirectory e chmodle autorizzazioni di file di sal 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 chmodriaccendo le autorizzazioni 400(eseguo nuovamente le autorizzazioni), provo a sourceinserire il file e questo succede:
% source s
Test
Sebbene le autorizzazioni siano 400, lo script viene eseguito.
Quindi ecco la mia domanda: perché ./sfallisce (come dovrebbe) ma source sviene eseguito normalmente? Ciò non vanifica l'intero scopo del permesso di esecuzione?
Su 400autorizzazioni sh se zsh sanche 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 se zsh s?