17 votes

Comment faire en sorte que Mac Terminal restaure les répertoires de travail au redémarrage ?

J'utilise le Terminal Mac avec une poignée d'onglets, chacun assigné à un répertoire de travail différent. Je l'ai configuré pour ouvrir de nouvelles fenêtres avec le même répertoire de travail. Néanmoins, lorsque je quitte le Terminal et que je le redémarre, il reconstruit tous les onglets, leurs noms, et me montre même la dernière sortie dans la fenêtre, mais il reste dans le répertoire personnel de l'utilisateur et ne restaure pas le dernier répertoire de travail de chaque onglet.

Qu'est-ce que je fais de mal ? Est-ce que cela peut être causé par un paramètre dans le ~/.bash_profile ?

15voto

Chris Page Points 7394

(Pour référence, nous parlons de la fonction Reprise de Mac OS X Lion 10.7 et plus).

Terminal restaure automatiquement le répertoire de travail si vous utilisez le shell par défaut, bash. Si vous utilisez un autre shell, vous devrez adapter le code de la section /etc/bashrc pour envoyer une séquence d'échappement afin de communiquer le répertoire de travail à Terminal pour qu'il puisse restaurer le répertoire plus tard pour Resume. Si vous utilisez zsh, consultez ma réponse à la question suivante Reprendre Zsh-Terminal (OS X Lion) dans lequel j'inclus le code approprié pour zsh.

Si vous avez une ~/.bash_profile o ~/.bashrc vous devrez peut-être vous assurer que vous n'annulez pas le comportement par défaut en modifiant l'option /etc/bashrc Les personnalisations de l'entreprise. En particulier, il définit l'option PROMPT_COMMAND pour envoyer la séquence d'échappement à chaque invite. Si vous personnalisez cette variable, vous devrez préfixer ou ajouter votre code à la valeur actuelle, par ex :

PROMPT_COMMAND="<your code here>;$PROMPT_COMMAND"

Aussi, en général, ~/.bash_profile devrait exécuter ~/.bashrc :

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

3voto

Michael Yagudaev Points 131

Si vous utilisez Bash-It, vous pouvez rencontrer le problème suivant $PROMPT_COMMAND en étant écrasé par elle.

Comme mentionné, il est utilisé par OS X pour restaurer le cwd dans les nouveaux onglets. Bash devrait ajouter des valeurs, et non les remplacer.

Mais une solution de contournement pour l'instant serait d'ajouter la ligne suivante à votre fichier ~/.bash_profile

source $BASH_IT/bash_it.sh
export PROMPT_COMMAND="$PROMPT_COMMAND;update_terminal_cwd;"

Pour plus d'informations, consultez le suivi des problèmes pour les mises à jour : https://github.com/revans/bash-it/issues/240

Et la référence Apple pour cela https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/sh.1.html

1voto

rsfinn Points 111

J'ai rédigé un article de blog sur la façon de faire cela pour csh/tcsh avant de découvrir cette réponse ; si quelqu'un d'autre vient ici à la recherche d'une solution pour ces shells, la voici :

if ("$?TERM_PROGRAM") then
  if ("$TERM_PROGRAM" == "Apple_Terminal") then
    alias precmd 'printf "\033]7;%s\a" "file://$host$cwd:ags/ /%20/"'
  endif
endif

Ajoutez cela à votre .cshrc o .tcshrc comme il convient. (L'instruction if externe est nécessaire pour éviter une erreur lors de la connexion à distance, comme avec ssh. Elle doit être une déclaration séparée à cause des règles d'expansion des variables dans tcsh).

Comme le support bash intégré d'Apple, cette solution n'utilise pas de programmes externes autres que printf au prix de l'échappement des espaces seulement. Si vous avez besoin d'échapper à d'autres caractères spéciaux, vous devrez travailler un peu plus dur pour trouver une solution plus complète.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X