Je suis confus quant à l'exécution des autorisations de fichier ne se comportant pas comme je m'y attendais. Probablement parce que mes attentes sont fausses. En tous cas:
J'ai un fichier script, pour la simplicité vient d'être appelé s
, situé dans ~/bin
. Pour cet exemple, le fichier contient uniquement les lignes suivantes:
#!/bin/zsh
echo "Test";
Très simple.
Je navigue vers le ~/bin
répertoire et chmod
les autorisations de fichier de - c'est- s
à 400
-dire en lecture seule pour moi uniquement. Aucune autorisation d'exécution. Alors j'essaie d'exécuter le script en entrant son chemin, en donnant ceci:
% ./s
zsh: permission denied: ./s
Jusqu'ici tout va bien. Le fichier ne peut pas être exécuté en raison de mauvaises autorisations. Augmenter les autorisations jusqu'à 500
(exécuter l'autorisation accordée) fonctionne également très bien - avec ces autorisations, le fichier s'exécute correctement:
% ./s
Test
Tout est comme prévu. Mais ensuite, je chmod
redescends vers 400
(exécuter à nouveau la permission), en essayant source
le fichier, et cela se produit:
% source s
Test
Bien que les autorisations le soient 400
, le script s'exécute.
Voici donc ma question: pourquoi ./s
échoue (comme il se doit) mais source s
s'exécute normalement? Cela ne va-t-il pas à l'encontre du but de l'autorisation d'exécution?
Aux 400
autorisations, sh s
et zsh s
aussi travailler.
Je suis sûr que je fais ou que je comprends quelque chose d'horriblement mal quelque part. Quelqu'un peut -il point où pour moi, et expliquer la différence entre ./s
, source s
, sh s
et zsh s
?
cat s
le contenu du fichier.cat s | zsh
les passezsh
et imprimeTest
.