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 modulez wiersza polecenia, aby zobaczyć, jak moduleto 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 modulewywoł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ę, modulea type modulenastę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
moduleto interfejs użytkownika do pakietu modułów. moduleAlias lub funkcję realizuje modulecmdprogram i ma powłokę ocenić wyjścia polecenia. Pierwszy argument modulecmdokreślający typ powłoki.
Pakiet Modules i modulekomenda 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