Rozejrzałem się i szukałem odpowiedzi na to pytanie, ale wydaje mi się, że nie mogę go znaleźć (co jest dziwne).
Moje pytanie brzmi: czy istnieje jakikolwiek prosty sposób na ponowne uruchomienie sesji bash z poziomu terminala na komputerze Mac. Chcę tylko tego samego zachowania, jak gdybym zamknął aplikację terminalową i uruchomił ją ponownie (wszystkie zmienne zostały zresetowane, źródło .bash_profile itp.).
Wiem, jak zdobyć .bash_profile, ale nie tego chcę. Jednym z powodów, dla których chcę to zrobić, jest to, że wtyczka do mojego monitu bash ma kod, który zapobiega wielokrotnemu ładowaniu kolorów. Dlatego pozyskiwanie .bash_profile nie przeładowuje zmiennych kolorów i muszę ponownie uruchomić aplikację terminalową, aby uzyskać zmiany.
exec bash
wtedy restartuje tylko tę interaktywną powłokę? Czy potrafisz też dokładnie wyjaśnić, co robi polecenie exec i jakie są opcje? Dzięki!man bash
, znajdź ostatnią instancję ciągu SHELL BUILTIN COMMANDS, a następnie przewiń w dół, aby wykonać. Krótko mówiąc, przekazanie-c
flagi spowoduje uruchomienie jej bez żadnych zmiennych środowiskowych (które mogą być wymagane do twoich celów, nie wiem), a inne argumenty -l i -a prawdopodobnie nie są tymi, których chcesz (wydają się być historyczne / niejasne i specyficzne funkcje). Możesz także użyć exec do otwierania nowych deskryptorów plików w bieżącej powłoce, jeśli zrezygnujesz z polecenia.-l
oto argument do bashowania i sprawia, że zachowuje się jak powłoka logowania. Otwieranie deskryptorów plików w bieżącej powłoce nie ma nic wspólnego z twoim pytaniem, ale możeszexec 4<>test.txt
na przykład użyć, aby deskryptor pliku 4 wskazywał na test.txt. Następnie w pozostałej części powłoki możesz zrobićecho test>&4
plik wyjściowy do test.txt.Przyjęta odpowiedź jest świetna dla powłoki używającej bash, o co również poprosił OP, jednak używam Terminala na macOS z powłoką inną niż domyślna (zsh) i uruchomienie polecenia
exec bash
oczywiście nie daje pożądanego efektu : uruchamia bash zamiast mojej domyślnej powłoki.Tak więc komenda environment-agnostic
exec $SHELL
wykorzystuje zmienną środowiskową,$SHELL
która przechowuje domyślną powłokę dla użytkownika.Należy również pamiętać, że Apple będzie zastąpienie bash z zsh MacOS Catalina więc mieć wpływu PO szuka działa albo
exec zsh
czyexec $SHELL
będzie droga po aktualizacji do MacOS 10.15.źródło