Używam terminala Mac z ręką pełną kart, z których każda jest przypisana do innego katalogu roboczego. Skonfigurowałem go tak, aby otwierał nowe okna z tym samym katalogiem roboczym. Niemniej jednak, kiedy wychodzę z terminalu i uruchamiam go ponownie, odbudowuje wszystkie zakładki, ich nazwy, pokazuje mi nawet ostatnie wyjście w oknie, ale pozostaje w katalogu osobistym użytkownika i nie przywraca najnowszego katalogu roboczego każdej zakładki.
Co ja robię źle? Czy może to być spowodowane niektórymi ustawieniami w ~/.bash_profile
?
Odpowiedzi:
(Dla porównania mówimy o funkcji Resume w Mac OS X Lion 10.7 i nowszych).
Terminal automatycznie przywraca katalog roboczy, jeśli używasz domyślnej powłoki, bash. Jeśli używasz innej powłoki, musisz dostosować kod,
/etc/bashrc
aby wysłać sekwencję zmiany znaczenia w celu przekazania katalogu roboczego do Terminala, aby mógł później przywrócić katalog do Wznowienia. Jeśli używasz zsh, zobacz moją odpowiedź na Resume Zsh-Terminal (OS X Lion) , w której dołączam odpowiedni kod dla zsh.Jeśli masz niestandardowy
~/.bash_profile
lub~/.bashrc
być może będziesz musiał upewnić się, że nie cofniesz domyślnego zachowania, modyfikując/etc/bashrc
dostosowania. W szczególności ustawiaPROMPT_COMMAND
zmienną środowiskową, aby wysyłała sekwencję zmiany znaczenia przy każdym pytaniu. Jeśli dostosujesz tę zmienną, musisz poprzedzić kod lub dołączyć go do bieżącej wartości, np .:Ogólnie rzecz biorąc,
~/.bash_profile
powinien również wykonać~/.bashrc
:źródło
.bashrc
(chociaż nie zauważyłem możliwości dostosowania poleceń. Teraz wykonuję następujące czynności: 1. Otwórz nowe okno Terminalu (otwiera się w katalogu osobistym mojego użytkownika) 2. Dokumenty cd 3. Zamknij Terminal 4. Otwórz Terminal 5 Okno ponownie się wyświetla, wyświetlając wynik zmiany katalogu, ale nadal znajduje się w katalogu domowym użytkownika~/.bash_profile
,~/.bash_login
i~/.profile
.~/.bashrc
zgodnie z twoją sugestią w odpowiedzi./etc/bashrc
Wygląda na to, że mój kod został poprawiony przez skrypt instalacyjny lub cokolwiek innego. Była taka,/etc/bashrc.orig
która zawierała dodatkową konfigurację (którą zakładam, że jest oryginalną konfiguracją) gist.github.com/3273170 . Ponowne dodanie tego do/etc/bashrc
sprawionych rzeczy działało zgodnie z oczekiwaniami. Wielkie dzięki za pomoc i cierpliwość!Jeśli używasz Bash-It, możesz napotkać problem z
$PROMPT_COMMAND
nadpisaniem go.Jak wspomniano, jest używany przez OS X do przywracania cwd w nowych kartach. Bash powinien dodawać wartości, a nie nadpisywać je.
Ale obejściem na razie byłoby dodanie następującego wiersza do twojego
~/.bash_profile
Aby uzyskać więcej informacji, sprawdź narzędzie do śledzenia problemów dla aktualizacji: https://github.com/revans/bash-it/issues/240
I referencje Apple na ten temat https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/sh.1.html
źródło
Napisałem wpis na blogu, jak to zrobić dla csh / tcsh, zanim odkryłem tę odpowiedź; jeśli ktoś tu przyjdzie i szuka rozwiązania dla tych powłok, oto:
Dodaj to do swojego
.cshrc
lub.tcshrc
odpowiednio. (Zewnętrzna instrukcja if jest niezbędna, aby uniknąć błędu podczas zdalnego logowania, tak jak w przypadku ssh. Musi to być osobna instrukcja ze względu na reguły rozszerzania zmiennych w tcsh.)Podobnie jak wbudowana obsługa Apple bash, to rozwiązanie nie korzysta z żadnych zewnętrznych programów
printf
, kosztem jedynie ucieczki. Jeśli musisz uciec przed innymi postaciami specjalnymi, będziesz musiał trochę ciężko pracować, aby znaleźć bardziej kompleksowe rozwiązanie.źródło