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 ~/binrépertoire et chmodles 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 chmodredescends vers 400(exécuter à nouveau la permission), en essayant sourcele 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 ss'exécute normalement? Cela ne va-t-il pas à l'encontre du but de l'autorisation d'exécution?
Aux 400autorisations, sh set zsh saussi 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 set zsh s?