Uruchamianie skryptu powłoki bez zmiennych środowiskowych

17

Jak wiem, nowo uruchomiony skrypt powłoki dziedziczy zmienne środowiskowe. Czy istnieje sposób, aby to zablokować? (uruchomiona powłoka bez dziedziczenia zmiennej)

Eonil
źródło

Odpowiedzi:

21

Wygląda na to, że możesz przedrostek skryptu env -iwyczyścić środowisko przed uruchomieniem skryptu:

env -i sh test.sh

Od man env:

-i, --ignore-environment
              start with an empty environment

Nie jestem pewien, dlaczego chcesz to zrobić ...

vmfarms
źródło
Dzięki. To zadziałało! Potrzebuję tego do wywołania skryptu budowania w IDE bez wpływu na zmienne środowiskowe konfiguracji IDE. Ale wciąż daleko do celu. To może pomóc twojej ciekawości!
Eonil
Aby dodać kolejny przypadek użycia: obecnie oceniam ryby i zsh jako alternatywę dla bash. Ale nie jestem gotowy do promowania powłoki kandydata jako mojej powłoki logowania (jak w chsh .... Jeśli po prostu otworzę okno terminala i uruchomię zshlub fish(z lub bez -lto nie ma znaczenia) zanieczyści moje środowisko wszelkiego rodzaju zmiennymi z powłoki zaczęłam go Doing sprawę z. env -crozwiązuje ten problem dla mnie zrobić. env -i TERM=xterm-256color $(which fish).
Paidhi
Jest to przydatne, jeśli zadanie cron kończy się niepowodzeniem, ponieważ środowisko nie jest poprawnie skonfigurowane i należy je przetestować; jest to również dobry sposób na sprawdzenie, czy skrypty przyjmują założenia dotyczące ustawień środowiska. Dzięki!
razzed
Innym możliwym miejscem, które może być przydatne, jest testowanie niektórych zadań okresowych (takich jak zadania cron), aby upewnić się, że nie ma zależności środowiskowych od skryptu. To samo dotyczy poleceń, które byłyby uruchamiane w zasobie „Exec” w manifeście marionetkowym.
TommyTheKid,
1

Jedna możliwość (choć wygląda raczej brzydko):

exec -c $SCRIPTuruchomi $ SCRIPT z pustym środowiskiem. (patrz man bashwyszukiwanie exec \[-cl\]).

weeheavy
źródło
1
Działa to prawie równo z env -i, jednak wybrałem użycie env -i, ponieważ exec przestaje wykonywać resztę skryptu.
Eonil
-1

O ile mi wiadomo, odpowiedź brzmi „nie”. Możesz zastąpić zmienne środowiskowe w samym skrypcie. Wartość zmiennej środowiskowej powinna powrócić do pierwotnej wartości po zakończeniu działania skryptu. Prawdopodobnie musisz uruchomić skrypt jako proces potomny: $ this.script.sh i tak, aby uniknąć konieczności wylogowywania się z powłoki za każdym razem, gdy uruchamiasz skrypt, aby zresetować zmienne środowiskowe do ich pierwotnej wartości.

Edytować:

Z wcześniejszego plakatu wydaje się, że się mylę, że nie jest to możliwe.

użytkownik53079
źródło