Pourquoi Terminal ne respecte-t-il pas les préférences?
Au cours de la semaine dernière, mon terminal a cessé d'honorer le paramètre «Nouveaux onglets ouverts avec: Même répertoire de travail». Le test avec "Nouvelles fenêtres ..." a donné le même résultat.
Mon shell est zsh.
J'ai pu faire fonctionner cela en suivant une réponse ici de Dan Rosenstark 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
}
Mais: je ne sais pas comment j'aurais pu déterminer cela moi-même, ou comment j'aurais pu déboguer un problème similaire .
Tous les trucs ou astuces pour comprendre quelles sont ces étapes initiales de Terminal seraient grandement appréciés.
Les choses qui n'ont pas fonctionné:
- Basculer les paramètres pour Nouvel onglet ou Nouvelle fenêtre
- Renommer ou ajouter
return
à la première ligne de.zshrc
,.zsh*
fichiers - Toutes les suggestions de l' onglet Ouvrir un nouveau terminal dans le répertoire de travail actuel ne fonctionnent pas
Autres informations potentiellement utiles:
- Les paramètres «Même profil» / «Profil par défaut» sont respectés lorsqu'ils sont modifiés
- L'ajout
pwd
comme première ligne de.zshrc
montre que le répertoire est déjà/home/<myuser>
- J'ai installé et désinstallé certains outils et projets impliquant
nix
récemment (y comprisnix-darwin
)

Métadonnées:
OS macOS Catalina 10.15.7 (19H2)
Terminal 2.10 (433)
zsh 5.7.1 (x86_64-apple-darwin19.0)
Réponses
Si vous cliquez sur «Échapper à la séquence…» dans cette capture d'écran, vous voyez ce qui suit:

Ce que cela ne vous dit pas, cependant, c'est que cela est normalement pris en charge dans le fichier /etc/zshrc_Apple_Terminal
, qui est appelé à partir de /etc/zshrc
. Il y a plusieurs choses qui peuvent empêcher /etc/zshrc_Apple_Terminal
d'être appelé ou qui peuvent remplacer ce qu'il essaie de faire:
- Vous démarrez Zsh avec
zsh -d
ouzsh -f
. - Vous avez un dossier
${ZDOTDIR:-$HOME}/.zshenv
ou${ZDOTDIR:-$HOME}/.zprofile
dans lequel vous avezsetopt NO_rcs
ousetopt NO_globalrcs
- Le paramètre
$TERM_PROGRAM
n'a pas la valeurApple_Terminal
. - Zsh n'a pas d'accès en lecture à
/etc/zshrc_Apple_Terminal
. - Lorsqu'il
/etc/zshrc_Apple_Terminal
est obtenu, le paramètre$INSIDE_EMACS
est différent de zéro. - Vous définissez une fonction
precmd
quelque temps après/etc/zshrc_Apple_Terminal
avoir obtenu la source, qui remplace alors celle définie paradd-zsh-hook
.
Ce que vous pouvez faire pour déboguer:
- Démarrez un sous-shell sans fichiers de configuration non globaux et voyez si le bogue s'y produit également:
Si le problème ne se produit pas dans ce sous-shell, cela signifie que le problème se trouve quelque part dans vos fichiers dot non globaux. Vous pouvez obtenir une liste de ces fichiers en faisantcd $(mktemp -d); HOME=$PWD ZDOTDIR=$PWD zsh
ls ${ZDOTDIR:-$HOME}/.z(log(in|out)|profile|sh(env|rc))(-^/)
- Redémarrez Zsh avec
exec zsh -vx
et étudiez la sortie depuis le début pour voir si la/etc/zshrc_Apple_Terminal
source est obtenue et si quelque chose plus tard remplace leprecmd
hook qu'il configure.