Ripristina l'ambiente del terminale per avviare lo stato, senza perdere la stampa della cronologia

1

Questo potrebbe sembrare un duplicato a prima vista, ma sopportare per un minuto.

TLDR; Un modo rapido di usare la riga di comando per ripristinare l'intero ambiente della shell come all'avvio del terminale, senza perdere la stampa (scorrere verso l'alto) dei comandi eseguiti in precedenza e dei relativi output.

Mi piacerebbe davvero un modo rapido per ripristinare l'ambiente della shell allo stato di avvio, come uscire dal programma terminale e avviarlo di nuovo (o aprire una nuova scheda). La ragione per cui non voglio realmente uscire dal programma e ricominciare è che non voglio perdere la cronologia, cioè la stampa dei comandi e delle uscite precedenti. (Confronta per cancellare in MATLAB, che elimina tutte le variabili, le definizioni di funzioni et.c. che hai impostato in quella sessione senza rimuovere la stampa dei comandi e delle uscite precedenti.)

Il solito consiglio che si riceve quando lo chiedi è

source ~/.bash_profile

Tuttavia, ad esempio, questo non ripristina $ PATH sul valore che ha quando viene aperto per la prima volta il programma terminale. Ho poche righe come

export PATH=$PATH:/path/to/some/useful/stuff/

nel mio $ PATH e per ogni volta che provengo, più elementi vengono aggiunti alla mia variabile $ PATH. Quindi non viene ripristinato sul valore di avvio del terminale su source . La stessa cosa vale per qualsiasi altra variabile impostata in quella sessione che non viene sovrascritta da qualche riga in ~/.bash_profile

Ho visto che le persone consigliano anche il comando reset . Tuttavia, questo non ripristina il mio $ PATH al suo valore originale. Rimane uguale a prima del ripristino.

Sto solo usando $PATH come esempio qui, la domanda riguarda il ripristino dell'intero ambiente shell.

Un modo veloce e affidabile per ripristinare l'ambiente della shell nel senso descritto sopra sarebbe molto utile quando si sperimentano installazioni e cose simili. Anche vedere come appare la variabile $PATH mi fa domandare quali altre cose non vengano ripristinate usando source ~/.bash_profile , e sembra inaffidabile utilizzarlo come metodo di reset.

Grazie per aver letto fino a qui!

Qualche gruppo di persone?

    
posta Anton 11.04.2018 - 05:19
fonte

2 risposte

1

Un'opzione per reimpostare lo stato della sessione Terminale ad eccezione della cronologia è salvare la cronologia corrente in un file temporaneo con qualcosa come history -w ~/.history_temp , quindi chiudere la finestra Terminale, aprirne una nuova, quindi rileggere la cronologia salvata con% codice%. Facoltativamente, puoi cancellare il file cron temporaneo quando hai finito.

Se non vuoi dover ricordare & digita quei comandi ogni volta, puoi creare alias per loro e metterli in history -w ~/.history_temp :

alias savehistory='history -w ~/.history_temp'
alias loadhistory='history -r ~/.history_temp && rm ~/.history_temp'
    
risposta data 11.04.2018 - 05:39
fonte
1

Impostare il percorso originale in una variabile all'inizio della sessione del terminale sarebbe una soluzione semplice.

ORIG_PATH="$PATH"

Quindi in qualsiasi momento è possibile riportare la variabile PATH al suo stato originale.

PATH="$ORIG_PATH"

Una soluzione più complessa sarebbe quella di impostare il PATH allo stato impostato dall'app loginwindow quindi eseguire path_helper come in /private/etc/profile e source ~/.bash_profile .

# Does launchd set the PATH variable?

LPATH=$(launchctl getenv PATH)

if [ -z "$LPATH" ]
then
    PATH=$(getconf PATH)
    eval $(/usr/libexec/path_helper -s)
else
    PATH=$LPATH
    eval $(/usr/libexec/path_helper -s)
fi

. ~/.bash_profile

Entrambe le soluzioni non richiedono una nuova sessione di terminale.

    
risposta data 11.04.2018 - 16:17
fonte

Leggi altre domande sui tag