Ich besitze ein Skript, das in meinem Dateisystem verstreut ist (Nebeneffekt eines Erstellungsprozesses) und das einige globale Umgebungsvariablen (LD_LIBRARY_PATH, PATH, ROOTDIR usw.) festlegt, die sich für einen ordnungsgemäßen Betrieb in meiner Shell befinden müssen. Das bedeutet natürlich, dass ich es zum source script.sh
Laufen . script.sh
bringen muss oder muss und nicht ./script.sh
(was eine neue Shell hervorbringen und die Variablen in meiner aktuellen Shell nicht setzen würde).
Kann ich dem Skript irgendetwas hinzufügen, um zu verhindern (oder zu warnen), dass jemand ausgeführt wird ./script.sh
?
Eine andere Option kann das Entfernen von Ausführungsberechtigungen sein. In diesem Fall kann es nicht ausgeführt werden, aber es kann trotzdem bezogen werden.
quelle
bash script
unabhängig vom Ausführungsflag eines Skripts ausführen. Auch unter Cygwin (zählt das?) Kann man Execute Flags nicht wegnehmen.Zusätzlich zur Prüfung von $ 0 ( Mikel- Antwort) kann es nützlich sein, beispielsweise die Erweiterung von .sh in .src zu ändern. Es wird helfen, jemanden zu verstehen, der dieses Skript nicht ausführen sollte.
quelle
Erstellen Sie einen benutzerdefinierten Interpreter
source_reminder
:Vergiss nicht, es ausführbar zu machen. Dann benutze es einfach in deinem Skript:
Wenn Sie das Skript jetzt ohne Quellenangabe ausführen, erledigt die Erinnerung ihre Aufgabe.
quelle
#!/bin/echo do not execute
oder#!/bin/false
oder#!/usr/bin/awk BEGIN { print "you must source " ARGV[1]; exit(1) }
. Dies erfasst jedoch nicht den Fall, dass das Skript mit so etwas ausgeführt wirdsh script
(da dies den Shebang ignoriert).