Come personalizzare .bashrc per configurare il prompt dei comandi?


8

C'è un modo semplice per cambiare il mio prompt di Bash per modificare i colori e quale testo viene visualizzato? Ho sentito che questo è fatto .bashrc, ma non ho trovato alcun modo semplice e piacevole per modificarlo. Come vengono espressi i colori in Bash?


Assicurati di navigare bash+prompt, anche se non credo che abbiamo un tutorial lì dentro.
Gilles 'SO- smetti di essere malvagio' il

2
C'è una buona guida per impostare un prompt di color bash sul wiki di Arch Linux , incluso un elenco di colori e alcuni buoni esempi.
Jasonwryan,

Risposte:


4

Una volta avevo quelle definite nel mio .bashrc:

export e="\e["

function cls          { echo -n "${e}H${e}J${e}0m"; }
function rcls         { echo -n "${e}H${e}J${e}S${e}H${e}J${e}0m${e}u${e}J"; } # not quite yet !
# rcls only works when no funny codes have been issued in between, i.e. the buffer is clean
# below the current screen. And then there can be issues with the first line of the buffer.

function bright       { echo -n "${e}1m"; }
function normal       { echo -n "${e}0m"; }
function colour       { echo -n "${e}$1;$2;$3m"; }
function black        { echo -n "${e}30m"; }
function bg_black     { echo -n "${e}40m"; }
function red          { echo -n "${e}31m"; }
function bg_red       { echo -n "${e}41m"; }
function green        { echo -n "${e}32m"; }
function bg_green     { echo -n "${e}42m"; }
function yellow       { echo -n "${e}33m"; }
function bg_yellow    { echo -n "${e}43m"; }
function blue         { echo -n "${e}34m"; }
function bg_blue      { echo -n "${e}44m"; }
function magenta      { echo -n "${e}35m"; }
function bg_magenta   { echo -n "${e}45m"; }
function cyan         { echo -n "${e}36m"; }
function bg_cyan      { echo -n "${e}46m"; }
function white        { echo -n "${e}37m"; }
function bg_white     { echo -n "${e}47m"; }
function c_up         { echo -n "${e}$1A"; }
function c_down       { echo -n "${e}$1B"; }    # within
function c_right      { echo -n "${e}$1C"; }
function c_left       { echo -n "${e}$1D"; }    # screen
function c_pos        { echo -n "${e}$1;$2f"; } # [Hf]
function c_line       { echo -n "${e}$1d"; }
function screentop    { echo -n "${e}H"; }      # [Hdf]
function linetop      { echo -n "${e}G"; }
function buffertop    { echo -n "${e}u"; }      # depends on other control characters ?
function tab          { echo -n "${e}I"; }
function backtab      { echo -n "${e}Z"; }
function scrolldown   { echo -n "${e}$1T"; }    # within screen
function scrolldown_B { echo -n "${e}$1L"; }    # scroll down below cursor
function scrollup_B   { echo -n "${e}$1M"; }    # scroll up below cursor
function clear        { echo -n "${e}J"; }      # delete to end of screen
function cleanbuffer  { echo -n "${e}S"; }      # copies first screen to bottom and clears
                                                # everything else above the cursor.
#function xxx { echo -n "${e}xxx"; }

export -f bright normal colour
export -f black bg_black red bg_red green bg_green yellow bg_yellow
export -f blue bg_blue magenta bg_magenta cyan bg_cyan white bg_white
export -f c_up c_down c_right c_left c_pos c_line
export -f screentop linetop buffertop tab backtab
export -f scrolldown scrolldown_B scrollup_B clear cleanbuffer

Puoi quindi usarli ad esempio con:

PS1_init="\n$(bright)$(black)$(hostname):\w\n$(bg_blue)"
PS1_end="$(normal)$(bright)\n\! -> $(normal)$(clear)"
export PS1="$PS1_init"'$(date)'"$PS1_end"

Questi possono aiutarti.

Il motivo per cui li ho trasformati in funzioni piuttosto che in variabili è la pigrizia. Volevo solo smettere di scrivere. Naturalmente se cerchi variabili di efficienza sarebbe meglio.

Alla fine della giornata, però, si adattano solo a determinati terminali. Quindi, per qualsiasi aiuto, consulta la documentazione del tuo terminale, non quella di bash o di qualsiasi altra shell.


Una delle migliori definizioni bashrc che abbia mai visto!
theTuxRacer

1
Le variabili risparmerebbero sulla digitazione: bright=$'\e1m'e così via. (A meno che tu non abbia bisogno di compatibilità con versioni molto vecchie che non avevano la $'…'sintassi.)
Gilles 'SO- smetti di essere malvagio'

@Gilles, hai frainteso: preferisco digitare blueal prompt (o in uno script di shell) rispetto a echo $blue.
asoundmove,

2

Bash utilizza la combinazione di colori Ansi - Articolo di Wikipedia: http://it.wikipedia.org/wiki/ANSI_escape_code#Colors

Ad esempio, ecco il mio prompt: (Mi piace il mio prompt su una riga separata, ma non tutti lo fanno. Inoltre, i miei termini hanno uno sfondo scuro - regola i colori se i tuoi termini sono chiari.)

export PS1='\[\e[0;36m\]\u\[\e[0m\]@\[\e[31m\]\h \[\e[0;36m\]\t \[\e[93m\]\w\[\e[36m\] p$$-\!-\$\[\e[0m\]\n\$ '

I valori dei prompt speciali sono descritti nella manpage di Bash in "Prompt":

\u  the username of the current user
\h  the hostname up to the first `.'
\t  the current time in 24-hour HH:MM:SS format
\w  the current working  directory,  with 
    $HOME  abbreviated with  a tilde
    (uses the value of the PROMPT_DIRTRIM variable)
$$  PID of the Bash (helps distinguish my many terms.
    Useful, eg, if I have to kill something.
\!  the history number of this command
\n     newline
\$  if the effective UID is 0, a #, otherwise a $

1
Bash non utilizza la combinazione di colori ansi. È il terminale che implementa i codici di escape. Bash funzionerà su qualsiasi terminale, quindi potrebbe essere meglio usarlo tput setf _n_per ottenere il codice di escape per impostare il colore di primo piano.
Camh

0

ad esempio per colorare puoi farlo:

Aggiungi semplicemente la seguente riga:

export PS1=" \[\033[34m\]\u@\h \[\033[33m\]\w\[\033[31m\]\[\033[00m\] $ "

Anteprima: inserisci qui la descrizione dell'immagine

Questi sono i miei colori preferiti. È possibile personalizzare ogni parte del colore del prompt modificando i mcodici (ad es. 34m) Che sono codici colore ANSI.

Elenco dei codici colore ANSI:

  • Nero: 30m
  • Rosso: 31m
  • Verde: 32m
  • Giallo: 33m
  • Blu: 34m
  • Viola: 35m
  • Ciano: 36m
  • Bianco: 37m

0

Nessuna di queste risposte mi ha aiutato a capire come funziona la pronta personalizzazione. Ecco cosa ho raccolto da poche ore di ricerche in vari forum, stack, wiki, ecc:

Trova il tuo prompt

nano ~/.bashrc

Cerca il tuo bashrcper PS1, manualmente o con Alt + F . Questo è il primo prompt di bash, quello che vedi quando riesci ad inserire un comando. PS[2-4]esistono anche, ma quelli sono usati raramente.

Definisci i colori

Sopra la PS1linea, aggiungi queste definizioni di colore:

# Color Variables
c1='\[\033[0;30m\]' # Non-bold color 1
C1='\[\033[1;30m\]' # Bold color 1
c2='\[\033[0;31m\]' # Non-bold color 2
C2='\[\033[1;31m\]' # Bold color 2
c3='\[\033[0;32m\]' # Non-bold color 3
C3='\[\033[1;32m\]' # Bold color 3
c4='\[\033[0;33m\]' # Non-bold color 4
C4='\[\033[1;33m\]' # Bold color 4
c5='\[\033[0;34m\]' # Non-bold color 5
C5='\[\033[1;34m\]' # Bold color 5
c6='\[\033[0;35m\]' # Non-bold color 6
C6='\[\033[1;35m\]' # Bold color 6
c7='\[\033[0;36m\]' # Non-bold color 7
C7='\[\033[1;36m\]' # Bold color 7
c8='\[\033[0;37m\]' # Non-bold color 8
C8='\[\033[1;37m\]' # Bold color 8
NC='\[\033[0m\]'    # Back to default color

Configura i colori

Ora, nel tuo terminale (presumibilmente grafico) dovresti avere qualche opzione di personalizzazione. Ad esempio, sto usando Konsole di KDE : Settings > Edit Current Profile... > Appearance > Edit...mostra questa interfaccia di personalizzazione:

Personalizzazione dei colori di Konsole

Ora cambiali in qualsiasi colore ti piaccia. Il tuo primo piano è il colore predefinito e i colori 1 ~ 8 sono quelli che hai definito che puoi scegliere. Non che le definizioni siano basate su 0 mentre questa personalizzazione e le variabili sono basate su 1.

Usa i colori nel tuo prompt

Per la mia richiesta predefinita, ho:

PS1="[\u@\h \W]\$ "

\uè il vostro u sername, \hè il vostro h ostname, \Wè W qui sei (quale directory), ed \$è il thingy prompt ( #quando userid = 0 [root]).

Puoi personalizzarlo aggiungendo $c1$ c2, ecc. Davanti al colore che vuoi cambiare. Ad esempio, ho:

PS1="$c2[$C8\u$c2@$C7\h $C6\W$c2]$C2\$$NC "

Questo risulta in:

Il mio prompt bash

Nota: è necessario utilizzare NCalla fine per ripristinare il colore predefinito, altrimenti tutto ciò che segue il prompt (input) sarà qualunque sia l'ultimo colore nel prompt.

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.