Come fare in modo che Mac Terminal ripristini le directory di lavoro al riavvio

15

Uso il terminale Mac con una mano piena di schede assegnate ciascuna a una diversa directory di lavoro. L'ho configurato per aprire nuove finestre con la stessa directory di lavoro. Tuttavia, quando esco da Terminal, e lo riavvio, ricompila tutte le schede, i loro nomi, mi mostra persino l'ultimo output nella finestra ma rimane nella directory home dell'utente e non ripristina l'ultima directory di lavoro di ogni scheda.

Che cosa sto sbagliando? Questo può essere causato da alcune impostazioni in ~/.bash_profile ?

    
posta Oliver Drotbohm 27.04.2012 - 08:23
fonte

3 risposte

14

(Per riferimento, stiamo parlando della funzione Riprendi di Mac OS X Lion 10.7 e versioni successive.)

Terminale ripristina automaticamente la directory di lavoro se stai usando la shell di default, bash. Se utilizzi un'altra shell, dovrai adattare il codice in /etc/bashrc per inviare una sequenza di escape per comunicare la directory di lavoro su Terminal in modo che possa ripristinare la directory in un secondo momento per riprenderla. Se stai usando zsh, vedi la mia risposta a Resume Zsh-Terminal (OS X Lion) , in cui includo il codice appropriato per zsh.

Se hai un ~/.bash_profile personalizzato o ~/.bashrc potresti aver bisogno di assicurarti di non annullare il comportamento predefinito modificando le personalizzazioni di /etc/bashrc . In particolare, imposta la variabile di ambiente PROMPT_COMMAND per inviare la sequenza di escape ad ogni prompt. Se personalizzi tale variabile, dovrai aggiungere il prefisso o aggiungere il codice al valore corrente, ad esempio:

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

Inoltre, in generale, ~/.bash_profile dovrebbe eseguire ~/.bashrc :

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi
    
risposta data 03.05.2012 - 09:24
fonte
3

Se utilizzi Bash-It, potresti incontrare il problema di $PROMPT_COMMAND che viene sovrascritto da esso.

Come detto, viene utilizzato da OS X per ripristinare CWD in nuove schede. Bash dovrebbe aggiungere i valori, non sovrascriverli.

Ma una soluzione per ora sarebbe aggiungere la seguente riga al ~/.bash_profile

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

Per maggiori informazioni consulta il tracker dei problemi per gli aggiornamenti: link

E il riferimento Apple per questo link

    
risposta data 13.01.2014 - 01:03
fonte
1

Ho scritto un post sul blog su come fare questo per csh / tcsh prima di scoprire questa risposta; se qualcun altro viene qui a cercare una soluzione per queste shell, eccola:

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

Aggiungi questo al tuo .cshrc o .tcshrc come appropriato. (L'istruzione if esterna è necessaria per evitare un errore durante l'accesso remoto, come con ssh. Deve essere un'istruzione separata a causa delle regole di espansione della variabile in tcsh.)

Come il supporto bash di Apple, questa soluzione non usa programmi esterni diversi da printf , al costo di soli spazi di escape. Se devi sfuggire ad altri personaggi speciali, dovrai lavorare un po 'più difficile per trovare una soluzione più completa.

    
risposta data 29.10.2013 - 18:15
fonte

Leggi altre domande sui tag