Ich bin verwirrt darüber, dass sich die Berechtigungen zum Ausführen von Dateien nicht wie erwartet verhalten. Wahrscheinlich, weil meine Erwartungen falsch sind. Wie auch immer:
Ich habe eine Skriptdatei, die der Einfachheit halber nur aufgerufen wird s
und sich in befindet ~/bin
. In diesem Beispiel enthält die Datei nur die folgenden Zeilen:
#!/bin/zsh
echo "Test";
Sehr einfach.
Ich navigieren Sie zu dem ~/bin
Verzeichnis und chmod
die Dateiberechtigungen von s
zu 400
- also schreibgeschützt nur für mich. Keine Ausführungsberechtigung. Dann versuche ich, das Skript auszuführen, indem ich seinen Pfad eingebe.
% ./s
zsh: permission denied: ./s
So weit, ist es gut. Die Datei kann aufgrund falscher Berechtigungen nicht ausgeführt werden. Das Anhäufen von Berechtigungen bis 500
(gewährte Ausführungsberechtigung) funktioniert ebenfalls einwandfrei. Mit diesen Berechtigungen wird die Datei einwandfrei ausgeführt:
% ./s
Test
Das ist alles wie erwartet. Aber dann habe ich die chmod
Berechtigung zurückgesetzt 400
(Berechtigung erneut ausführen aus), um source
die Datei zu testen, und dies passiert:
% source s
Test
Obwohl Berechtigungen vorhanden sind 400
, wird das Skript ausgeführt.
Hier ist meine Frage: Warum schlägt ./s
fehl (wie es sollte), wird aber source s
normal ausgeführt? Hat dies nicht den ganzen Zweck der Ausführungserlaubnis zunichte gemacht?
Bei 400
Berechtigungen sh s
und zsh s
auch arbeiten.
Ich bin sicher, dass ich irgendwo etwas schrecklich Falsches tue oder verstehe. Kann jemand Punkt, wo ich, und den Unterschied zwischen erklären ./s
, source s
, sh s
und zsh s
?
cat s
nur den Inhalt der Datei.cat s | zsh
übergibt sie anzsh
und drucktTest
.