Mam skrypt zaśmiecony wokół mojego systemu plików (efekt uboczny procesu kompilacji), który ustawia niektóre globalne zmienne środowiskowe (LD_LIBRARY_PATH, PATH, ROOTDIR itp.), Które muszą znajdować się w mojej powłoce, aby poprawnie działać. Oczywiście oznacza to, że muszę to zrobić source script.sh
lub . script.sh
sprawić, by działało, a nie ./script.sh
(co spowoduje odrodzenie nowej powłoki i nie ustawianie zmiennych w mojej bieżącej powłoce).
Czy jest coś, co mogę dodać do skryptu, aby zapobiec (lub ostrzec) przed uruchomieniem ./script.sh
?
Inną opcją może być usunięcie uprawnień do wykonywania. W takim przypadku nie można go wykonać, ale nadal można go uzyskać.
źródło
bash script
niezależnie od flagi wykonania na skrypcie. Również pod Cygwin (czy to się liczy?) Nie można zabrać flag wykonawczych.Oprócz sprawdzenia $ 0 ( odpowiedź Mikela ) może być przydatna na przykład zmiana rozszerzenia z .sh na .src. Pomoże to zrozumieć każdego, kto nie powinien wykonać tego skryptu.
źródło
Utwórz niestandardowego interpretera
source_reminder
:Nie zapomnij, aby był wykonywalny. Następnie użyj go w skrypcie:
Teraz, jeśli uruchomisz skrypt bez źródła, przypomnienie wykona swoją pracę.
źródło
#!/bin/echo do not execute
lub#!/bin/false
lub#!/usr/bin/awk BEGIN { print "you must source " ARGV[1]; exit(1) }
. Jednak nie wychwytuje to przypadku, w którym skrypt jest wykonywany z czymś podobnymsh script
(ponieważ ignoruje to Shebang).