Dlaczego Terminal nie przestrzega preferencji?
Gdzieś w zeszłym tygodniu mój terminal przestał przestrzegać ustawienia „Otwieraj nowe karty z: tym samym katalogiem roboczym”. Testowanie z "Nowe okna ..." dało ten sam wynik.
Moja powłoka to zsh.
Udało mi się to uruchomić, podążając za odpowiedzią tutaj od Dana Rosenstarka https://apple.stackexchange.com/a/340778/398648
# http://superuser.com/a/315029/4952
# Set Apple Terminal.app to resume directory... still necessary 2018-10-26
if [[ $TERM_PROGRAM == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]] {
function chpwd {
local SEARCH=' '
local REPLACE='%20'
local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
printf '\e]7;%s\a' "$PWD_URL"
}
chpwd
}
Ale: nie wiem, jak mogłem to ustalić samodzielnie lub jak mogłem zdebugować podobny problem .
Wszelkie wskazówki lub sztuczki, aby dowiedzieć się, jakie są te początkowe kroki Terminalu, będą bardzo mile widziane.
Rzeczy, które nie zadziałały:
- Przełączanie ustawień nowej karty lub nowego okna
- Zmiana nazwy lub dodanie
return
w pierwszej linii.zshrc
,.zsh*
pliki - Wszystkie sugestie na karcie Otwórz nowy terminal w bieżącym katalogu roboczym nie działają
Inne potencjalnie przydatne informacje:
- Ustawienia „Ten sam profil” / „Profil domyślny” są uwzględniane po zmianie
- Dodanie
pwd
jako pierwsza linia.zshrc
pokazuje, że katalog już istnieje/home/<myuser>
- Zainstalowałem i odinstalowałem niektóre narzędzia i projekty dotyczące
nix
ostatnio (w tymnix-darwin
)

Metadane:
OS macOS Catalina 10.15.7 (19H2)
Terminal 2.10 (433)
zsh 5.7.1 (x86_64-apple-darwin19.0)
Odpowiedzi
Jeśli klikniesz „Sekwencję ucieczki…” na tym zrzucie ekranu, zobaczysz:

Nie mówi to jednak, że normalnie zajmuje się tym plik /etc/zshrc_Apple_Terminal
, który jest wywoływany from /etc/zshrc
. Jest kilka rzeczy, które mogą zapobiec /etc/zshrc_Apple_Terminal
wywołaniu lub które mogą zastąpić to, co próbuje zrobić:
- Rozpoczynasz Zsh z
zsh -d
lubzsh -f
. - Masz plik
${ZDOTDIR:-$HOME}/.zshenv
lub${ZDOTDIR:-$HOME}/.zprofile
w którym maszsetopt NO_rcs
lubsetopt NO_globalrcs
- Parametr
$TERM_PROGRAM
nie ma wartościApple_Terminal
. - Zsh nie ma dostępu do odczytu
/etc/zshrc_Apple_Terminal
. - Gdy
/etc/zshrc_Apple_Terminal
jest pozyskiwany, parametr$INSIDE_EMACS
jest różny od zera. - Definiujesz funkcję
precmd
jakiś czas po/etc/zshrc_Apple_Terminal
pobraniu źródła, która następnie zastępuje funkcję zdefiniowaną przezadd-zsh-hook
.
Co możesz zrobić, aby debugować:
- Uruchom podpowłokę bez nieglobalnych plików konfiguracyjnych i zobacz, czy błąd też tam występuje:
Jeśli problem nie występuje w tej podpowłoce, oznacza to, że problem występuje gdzieś w Twoich nieglobalnych plikach dot. Możesz uzyskać listę tych plików, wykonująccd $(mktemp -d); HOME=$PWD ZDOTDIR=$PWD zsh
ls ${ZDOTDIR:-$HOME}/.z(log(in|out)|profile|sh(env|rc))(-^/)
- Zrestartuj Zsh za pomocą
exec zsh -vx
i przestudiuj dane wyjściowe od początku, aby zobaczyć, czy/etc/zshrc_Apple_Terminal
jest pozyskiwane i czy coś później zastępujeprecmd
podłączenie, które ustawia.