Terminale, prompt modificato in "-Bash-4.2" e colori persi


8

Di solito il mio prompt del terminale era

username place$

ora mostra solo

bash-4.2$

e tutte le impostazioni di colore sono state perse (sul profilo del terminale ho lo stesso schema di colori, ma non mostra i colori)

Non ho idea di cosa accada (e non so come cercarlo).

Non cambia nulla, stavo lavorando con Eclipse e Maven, ho aperto un nuovo terminale e il nuovo terminale non aveva colori.

Nota: non ho un file ~ / .bashrc, ma ho un ~ / .bash_profile.


Il prompt è impostato dalla variabile PS1, qui puoi leggere di più su questo, ci sono anche vari esempi di prompt colorati
RSFalcon7

Succede 1) Solo quando accedi a una console, 2) Solo quando apri un nuovo terminale GUI, 3) Sia 1 che 2? Se non sei sicuro del numero 1, passa a un VT e accedi o prova bash -l.
Riccioli d'oro

@ TAFKA'goldilocks 'entrambi, se uso bash -l i colori tornano, ma il prompt rimane a "bash-4.2 $"
lcjury

Se la mia risposta non funziona, pubblica l'output echo $PS1nella versione di accesso con i colori.
riccioli d'oro

Risposte:


10

$PS1Probabilmente la variabile prompt non è stata impostata, quindi \s-\v\$viene utilizzato il valore predefinito incorporato .

Quando bash si avvia in modo interattivo, genera un file di configurazione, di solito uno ~/.bashrco ~/.bash_profile, presumendo che esistano, ed è così che viene impostato un prompt più elaborato. Da man bash:

INVOCAZIONE

[...] Quando bash viene invocato come shell di login interattiva o come shell non interattiva con l'opzione --login, legge innanzitutto ed esegue i comandi dal file / etc / profile, se quel file esiste. Dopo aver letto quel file, cerca ~ / .bash_profile, ~ / .bash_login e ~ / .profile, in questo ordine [...]

[...] Quando viene avviata una shell interattiva che non è una shell di accesso, bash legge ed esegue i comandi da ~ / .bashrc, se quel file esiste.

Non avendo impostato il prompt può verificarsi in due contesti diversi, quindi shell di accesso e shell non di accesso. Se si utilizza un display manager per accedere direttamente alla GUI, non si incontrano shell di accesso se non si passa a una console virtuale (tramite, ad esempio, da CtrlAlt+ F1 a F6). Tuttavia, è possibile verificare la bash profilo di accesso nella GUI con l'apertura di una nuova shell di login in modo esplicito: bash -l.

Il problema si verifica con shell non di accesso

Se il problema si verifica con, ad esempio, i normali terminali della GUI, allora ~/.bashrcmanca il tuo , oppure è stato modificato per escludere l'approvvigionamento di un file globale, probabilmente /etc/bashrc.

  • Se ~/.bashrcnon esiste, dovrebbe essere /etc/skel/.bashrcutilizzato per crearlo per i nuovi utenti. Copia semplicemente quel file nella tua home directory e il tuo prompt predefinito dovrebbe tornare per la prossima nuova shell che apri.

  • Se ~/.bashrcesiste, controlla se esiste una linea da qualche parte che genera /etc/bashrc:

    . /etc/bashrc
      -OR-
    source /etc/bashrc

    In caso contrario, controlla se quel file esiste (dovrebbe, almeno sulla maggior parte delle distribuzioni Linux) e aggiungi una tale linea alla tua ~/.bashrc.

Il problema si verifica con le shell di accesso

Se il problema si verifica con shell di accesso e shell non di accesso, il problema è probabilmente lo stesso di cui sopra. Se si verifica solo con le shell di accesso, o non hai uno dei file menzionati per le shell di accesso sotto la citazione INVOCATION sopra, oppure non hanno il tuo sorgente ~/.bashrc, cosa normale sulla maggior parte delle distribuzioni Linux. Se nessuno di questi file esiste, creane uno ~/.bash_profilecon questo:

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

Ciò consente, per la maggior parte, di mantenere la configurazione in un file ( ~/.bashrc).


Se non importa cosa fai, non puoi ricevere un prompt, puoi crearne uno e metterlo in ~/.bashrcquesto modo:

if [ "$PS1 ]; then
    PS1= .... # see below
fi

Questo perché $ PS1 è impostato e ha un valore predefinito per le shell interattive e non si desidera impostarlo diversamente poiché altre cose potrebbero utilizzare questo valore per determinare se si tratta di un ambiente interattivo.

La pagina man di bash contiene una sezione PROMPTING che descrive come impostare un prompt con caratteristiche dinamiche come il nome utente e la directory di lavoro corrente, che sarebbe, ad esempio:

PS1="\u \w:"

C'è una guida per usare il colore qui . Presta attenzione al fatto che dovresti racchiudere caratteri non stampati in ( \[e \]c'è una discussione di questo alla fine della risposta sui colori).


Grazie TAFKA !, più che una semplice risposta ho imparato qualcosa di nuovo :)!
lcjury

1

Basta incollarlo in ~ / .bashrc e ~ / .bash_profile come root sull'utente interessato.

# Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrc fi


0

Ho dovuto aggiornare Cygwin Bash per motivi di sicurezza.

il vecchio bash = 4.1.10 (4)-release (i686-pc-cygwin) intorno al 2009

$ echo $PS1

\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$

il nuovo bash = 4.4.12 (3)-release (i686-pc-cygwin) intorno al 2016

Per ottenere lo stesso identico aspetto, è stato necessario aggiungere a .bashrc:

#

GREEN="\[$(tput setaf 2)\]"

YELLOW="\[$(tput setaf 3)\]"

RESET="\[$(tput sgr0)\]"

PS1="\n${GREEN}\u@\h ${YELLOW}\w${RESET}\n$ "

cd $HOME

#

nota: incluso il cd $HOME

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.