Wygląda na to, że proste wywołanie powłoki w twoim systemie nie dziedziczy zdefiniowanego aliasu (lub funkcji) module
, więc powłoka nie jest w stanie jej znaleźć (patrz poniżej uwaga z fragmentami). Spróbuj type module
z wiersza polecenia, aby zobaczyć, jak module
to jest obecnie zdefiniowane.
Zasadniczo ze źródłem jest tak, jakbyś pisał każdą linię skryptu z klawiatury.
Zauważ, że z jednej strony dziedziczysz całą konkretną historię bieżącej powłoki, ale z drugiej strony bieżąca powłoka będzie podlegać wszystkim efektom skryptu i module
wywołaniu.
O różnicach między źródłem skryptu a jego uruchomieniem można przeczytać w SuperUser wrzesień 2009 lub grudzień 2009 , Ubuntu luty 2011 , Unix sierpień 2011 , Stackoverflow grudzień 2012 lub w wielu innych miejscach.
W związku z tym w sekcji Moduły plików znajduje się ostrzeżenie :
... Zmienne środowiskowe są rozbrojone podczas rozładowywania pliku modułu. Dlatego możliwe jest załadowanie pliku modułu, a następnie zwolnienie go bez powrotu zmiennych środowiskowych do poprzedniego stanu.
Bardziej rozsądne wydaje się wykonanie go w skrypcie .
Aby osiągnąć to drugie, mogę pomyśleć:
Aby użyć interaktywnej powłoki , zaniedbując konkretną historię obecnej powłoki, modyfikując shebang skryptu za pomocą
#!/bin/bash -i
Interaktywna powłoka czyta polecenia z danych wprowadzanych przez użytkownika na terminalu tty. Między innymi taka powłoka czyta pliki startowe podczas aktywacji, wyświetla monit i domyślnie włącza kontrolę zadań ...
Jeśli zamiast tego wolisz odziedziczyć konkretną historię obecnej powłoki, możesz spróbować ją zdobyć ... ale w podpowłoce
( source runit.sh )
Spróbuj znaleźć bieżący alias / funkcję, module
a type module
następnie zmodyfikuj w konsekwencji swój skrypt. Uwaga: nie można ustawić niektórych zmiennych środowiskowych module
.
Jeśli chcesz, możesz znaleźć skrypty inicjujące w katalogu $MODULESHOME/init/<shell>
.
Komentarz
Jak zapamiętano w pytaniach i odpowiedziach dotyczących modułów
Proces potomny (skrypt) nie może zmienić środowiska procesu macierzystego. Ładowanie modułu w skrypcie wpływa tylko na środowisko dla samego skryptu. Jedynym sposobem na zmianę skryptu w bieżącym środowisku jest źródło skryptu, który wczytuje go do bieżącego procesu.
Więc jeśli chcesz uniknąć modyfikacji obecnego środowiska, myślę, że lepiej jest spróbować zmienić shebang (1) lub źródło skryptu w podpowłoce (2). Nie jestem całkowicie pewien użyteczności skrzynki (3).
Uwaga
Fragmenty stron podręcznika i opisów modułów
module
to interfejs użytkownika do pakietu modułów. module
Alias lub funkcję realizuje modulecmd
program i ma powłokę ocenić wyjścia polecenia. Pierwszy argument modulecmd
określający typ powłoki.
Pakiet Modules i module
komenda są inicjowane, gdy skrypt inicjujący specyficzny dla powłoki jest pobierany do powłoki . Skrypt tworzy polecenie modułu, jako funkcję aliasu lub powłoki, tworzy zmienne środowiskowe Modules