Terminal - come riavviare la sessione dopo essere usciti inavvertitamente?

19

A volte esco inavvertitamente da una sessione del terminale (solitamente perché penso di essere connesso a un sistema remoto, quando non lo sono), quindi arrivo a questo punto:

Come posso riavviare la sessione a questo punto? Non voglio chiudere la finestra o la scheda perché ho un sacco di schede tutte impostate per il mio normale flusso di lavoro, quindi voglio solo riavviare la sessione nella scheda corrente (cioè tornare a un prompt di bash).

L'unica soluzione che ho trovato finora è di chiudere completamente Terminal e aprirlo di nuovo, ma questo è tutt'altro che ideale in quanto ovviamente interrompe qualsiasi altra cosa che sto facendo in altre finestre / schede di Terminale.

    
posta Paul R 17.12.2015 - 16:02
fonte

2 risposte

20

A questo punto, non c'è modo di riavere la scheda. La sessione del terminale è chiusa e non ha più un TTY. Non c'è modo di fare riferimento alla scheda per fare qualcosa di intelligente. Ti suggerirei di aggiungere questa funzione al tuo .bashrc o .profile in modo da non avere il problema in futuro:

exit() {
    read -t5 -n1 -p "Do you really wish to exit? [yN] " should_exit || should_exit=y
    case $should_exit in
        [Yy] ) builtin exit $1 ;;
        * ) printf "\n" ;;
    esac
}

o, per quelli di noi che usano la Z Shell (aggiungila al tuo .zshrc):

exit() {
    if read -t5 -q should_exit\?"Do you really wish to exit? [yN] "; then
        builtin exit $1
    fi
}

È una bella piccola barriera tra te e quel fastidioso comando di uscita! Il Signore sa che ho fatto la stessa cosa molte volte in passato.

    
risposta data 17.12.2015 - 16:50
fonte
1

Lo script di William T Froggard non ha fatto ciò di cui avevo bisogno, perché generalmente l'unico modo in cui mi trovo in questa situazione è tramite ^ D ( ctrl + D ), e ridefinendo exit non ha fatto nulla per quella situazione. Per me, il suggerimento di Dennis Williamson di impostare IGNOREEOF è stato sufficiente. Ho appena aggiunto:

# Do not exti on a single ^D, require 2 in a row
IGNOREEOF=1

al mio file ~/.bashrc e ora (se sono nella shell di livello superiore e uscire dal terminale) il primo ^ D genera la risposta:

Use "logout" to leave the shell.

Se digito ^ D di nuovo immediatamente, la shell termina, così uscendo quando voglio è ancora facile, ma ora una sola ^ D mi darà un avvertimento. (Se vuoi, puoi impostare IGNOREEOF su un numero più alto per richiedere ulteriori consecutivi ^ D's.)

Anche utile, se sono in una sotto-shell, il primo ^ D genera la risposta:

Use "exit" to leave the shell.

Ancora una volta, un extra ^ D mi farà uscire, e ora posso dire la differenza tra l'uscita da una sub-shell e l'uscita dalla shell di primo livello.

    
risposta data 09.09.2018 - 22:56
fonte

Leggi altre domande sui tag