Color Bash Prompt (Italiano)

From ArchWiki
Revision as of 11:12, 19 June 2008 by Pikiweb (Talk | contribs)

Jump to: navigation, search

Tango-preferences-desktop-locale.pngThis article or section needs to be translated.Tango-preferences-desktop-locale.png

Notes: please use the first argument of the template to provide more detailed indications. (Discuss in Talk:Color Bash Prompt (Italiano)#)
Template:I18n links start

Template:I18n entry Template:I18n entry Template:I18n links end

Sommario

Esistono varie possibilità per il proprio prompt di bash e personalizzarlo aiuterà ad essere più produttivi dalla linea di comando. Si possono aggiungere informazioni al proprio prompt, o semplicemente colorarlo per farlo risaltare.

Prompt basilari

Le seguenti impostazioni sono utili per distinguere il prompt di root da quello di utente normale:

Verde per utenti normali:

 export PS1='\[\e[0;32m\]\u@\h \W]\$ '

Impostare la variabile PS1 nel proprio file ~/.bashrc ed esportarla.

Rosso per root:

  export PS1='\[\e[0;31m\]\u@\h \W]\$ '

Impostare la variabile PS1 nel proprio file /root/.bashrc ed esportarla.

Prompt distinti per root e non root

E' necessario usare due file ~/.bashrc separati, uno per root e uno per utenti normali:

vim ~/.bashrc

Commentare la riga di default per PS1:

#PS1='[\u@\h \W]\$ '

Usare il seguente prompt per utente normale:

PS1='\[\e[0;32m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[1;32m\]\$ \[\e[m\]\[\e[1;37m\] '

Fornisce nome utente in colore verde, directory attuale in blu, il prompt in verde brillante e il testo in bianco.

Modificare il prompt di root:

sudo vim /root/.bashrc

Commentare il prompt di default:

#PS1='[\u@\h \W]\$ '

Usare il seguente:

PS1='\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[0;31m\]\$ \[\e[m\]\[\e[0;32m\] '

Fornisce il nome utente 'root' in rosso, la directory attuale in blu, un '#' rosso per la designazione di root, il testo digitato in and text-typing in verde.

Di seguito i codici di bash per i colori:

Nero           0;30     Grigio scuro      1;30
Blu            0;34     Blu brillante     1;34
Verde          0;32     Verde brillante   1;32
Ciano          0;36     Ciano brillante   1;36
Rosso          0;31     Rosso brillante   1;31
Viola          0;35     Viola brillante   1;35
Marrone        0;33     Giallo            1;33
Grigio chiaro  0;37     Bianco            1;37

Sostituire il carattere 0 con 1 per avere la versione brillante del colore! Si sperimenti liberamente; si veda la pagina di man di bash citata di seguito per personalizzare i caratteri speciali.

Suggerimento:

\[     comuncia una sequenza di caratteri non stampabili
\]     termina la sequenza di caratteri non stampabili

Personalizzare ulteriormente il proprio prompt

  • Modificare il proprio ~/.bashrc commentando il prompt di default in Arch:
# PS1='[\u@\h \W]\$ '
  • Aggiungere le seguenti righe a ~/.bashrc
BLUE=`tput setf 1`
GREEN=`tput setf 2`
CYAN=`tput setf 3`
RED=`tput setf 4`
MAGENTA=`tput setf 5`
YELLOW=`tput setf 6`
WHITE=`tput setf 7`
PS1='\[$GREEN\]\u@\h \[$BLUE\]\w/\[$GREEN\] \$\[$WHITE\] '

I caratteri \[ e \] sono necessari per evitare problemi di assemblamento di righe nel terminale.

  • Ora dare da shell il comando:
source ~/.bashrc

Si potrebbe modificare il proprio /root/.bashrc con un insieme simile di righe, magari con RED a indicare \u (l'utente).


Di seguito i vari comandi di escape preceduti da backslash, \x (citati dalla pagina di manuale di bash):

     Bash permette di personalizzare queste stringhe di prompt inserendo vari caratteri di escape speciali che vengono interpretati come segue:
      \a     il carattere ASCII beep (07)
      \d     la data nel formato "Giorno-della-settimana Mese Data"
             (e.g., "Tue May 26")
      \e     un carattere di escape ASCII (033)
      \h     l'hostname fino al primo `.'
      \H     l'hostname
      \n     il carattere "newline"
      \r     il carattere "carriage return"
      \s     il nome della shell, il nome base di $0
             (la parte che segue lo slash finale)
      \t     l'ora corrente nel formato 24-ore HH:MM:SS
      \T     l'ora corrente nel formato 12-ore HH:MM:SS
      \@     l'ora corrente nel formato 12-ore am/pm
      \u     lo username dell'utente corrente
      \v     la versione di bash (e.g., 2.00)
      \V     la release di bash, versione + patchlevel
             (e.g., 2.00.0)
      \w     la directory di lavoro corrente
      \W     il nome di base della directory di lavoro corrente
      \!     il numero cronologico (history number) di questo comando
      \#     il numero di questo comando
      \$     se l'UID effettivo è 0, un #, altrimenti un $
      \nnn   il carattere corrispondente al numero ottale nnn
      \\     un backslash
      \[     comuncia una sequenza di caratteri non stampabili, che
             potrebbero essere usati per inserire una sequenza di
             controllo del terminale nel prompt
      \]     termina la sequenza di caratteri non stampabili
            
     Il numero di comando e il numero della cronologia sono usualmente diversi: il numero della cronologia di una comando e' la sua posizione
     nella lista della cronologia, che potrebbe includere comandi reintegrati dal file di cronologia (vedere HISTORY di seguito), mentre il
     numero di comando e' la posizione nella sequenza di comandi eseguiti durante la sessione di shell attuale. Dopo che la stringa sia stata
     decodificata, e' espansa attraverso espansione di parametri, sostituzione di comandi, espansione aritmetica, rimozione di apici, soggetta
     al valore delle opzioni di promptvars della shell (vedere la descrizione del comando shopt sotto SHELL BUILTIN COMMANDS, di seguito).

Esempi di prompt avanzati

Prompt di Wolfman

Questo prompt di Bash mostra gli ultimi 25 caratteri della directory di lavoro attuale. I risultati migliori si ottengono su terminali con sfondo nero. Il codice seguente va inserito nel proprio file .bashrc, all'interno della home.

  • Si commenta il prompt di default di Arch.
# PS1='[\u@\h \W]\$ '
  • Ora si aggiunge la funzione bash_prompt_command. Se si possiedono alcune directory con nomi lunghi o che iniziano con molte sottodirectory, tale funzione evitera' al prompt dei compandi di riempire lo schermo, mostrando al massimo gli ultimi pwdmaxlen caratteri della PWD (directory corrente). Questo codice e' stato preso dalla sezione Bash Prompt Howto in Controlling the Size and Appearance of $PWD e modificato per sostituire la directory home dell'utente con una tilde.
##################################################
# Fancy PWD display function
##################################################
# The home directory (HOME) is replaced with a ~
# The last pwdmaxlen characters of the PWD are displayed
# Leading partial directory names are striped off
# /home/me/stuff          -> ~/stuff               if USER=me
# /usr/share/big_dir_name -> ../share/big_dir_name if pwdmaxlen=20
##################################################
bash_prompt_command() {
    # How many characters of the $PWD should be kept
    local pwdmaxlen=25
    # Indicate that there has been dir truncation
    local trunc_symbol=".."
    local dir=${PWD##*/}
    pwdmaxlen=$(( ( pwdmaxlen < ${#dir} ) ? ${#dir} : pwdmaxlen ))
    NEW_PWD=${PWD/#$HOME/\~}
    local pwdoffset=$(( ${#NEW_PWD} - pwdmaxlen ))
    if [ ${pwdoffset} -gt "0" ]
    then
        NEW_PWD=${NEW_PWD:$pwdoffset:$pwdmaxlen}
        NEW_PWD=${trunc_symbol}/${NEW_PWD#*/}
    fi
}
  • Questo codice genera il prompt dei comandi. Non c'e' molto altro. Sono definiti un paio di colori. Il colore dell'utente per il nome utente, l'hostname e il prompt ($ o #) e' impostato a ciano, mentre se l'utente e' root (l'UID di root e' sempre 0), imposta il colore a rosso. IL prompt dei comandi e' una versione colorata del prompt di default di Arch, con NEW_PWD fproveniente dalla precedente funzione.
  • Si presti inoltre attenzione che le variabili dei colori sono racchiuse tra doppi apici (virgolette), non singoli apici (apostrofi). L'uso di singoli apici sembra creare problemi a bash con la corretta separazione di righe.
bash_prompt() {
    case $TERM in
     xterm*|rxvt*)
         local TITLEBAR='\[\033]0;\u:${NEW_PWD}\007\]'
          ;;
     *)
         local TITLEBAR=""
          ;;
    esac
    local NONE="\[\033[0m\]"    # unsets color to term's fg color
    
    # regular colors
    local K="\[\033[0;30m\]"    # black
    local R="\[\033[0;31m\]"    # red
    local G="\[\033[0;32m\]"    # green
    local Y="\[\033[0;33m\]"    # yellow
    local B="\[\033[0;34m\]"    # blue
    local M="\[\033[0;35m\]"    # magenta
    local C="\[\033[0;36m\]"    # cyan
    local W="\[\033[0;37m\]"    # white
    
    # emphasized (bolded) colors
    local EMK="\[\033[1;30m\]"
    local EMR="\[\033[1;31m\]"
    local EMG="\[\033[1;32m\]"
    local EMY="\[\033[1;33m\]"
    local EMB="\[\033[1;34m\]"
    local EMM="\[\033[1;35m\]"
    local EMC="\[\033[1;36m\]"
    local EMW="\[\033[1;37m\]"
    
    # background colors
    local BGK="\[\033[40m\]"
    local BGR="\[\033[41m\]"
    local BGG="\[\033[42m\]"
    local BGY="\[\033[43m\]"
    local BGB="\[\033[44m\]"
    local BGM="\[\033[45m\]"
    local BGC="\[\033[46m\]"
    local BGW="\[\033[47m\]"
    
    local UC=$W                 # user's color
    [ $UID -eq "0" ] && UC=$R   # root's color
    
    PS1="$TITLEBAR ${EMK}[${UC}\u${EMK}@${UC}\h ${EMB}\${NEW_PWD}${EMK}]${UC}\\$ ${NONE}"
    # without colors: PS1="[\u@\h \${NEW_PWD}]\\$ "
    # extra backslash in front of \$ to make bash colorize the prompt
}
  • Infine, aggiungere questo codice. Esso si assicura che la variabile NEW_PWD sia aggiornata quando si cambia directory e imposta la variabile PS1, che contiene il prompt dei comandi.
PROMPT_COMMAND=bash_prompt_command
bash_prompt
unset bash_prompt
  • Se si vogliono sperimentare i colori del prompt, aprire il proprio file .bashrc con un editor di testo. Quando si voglia vedere come si mostra il nuovo prompt, inserire il seguente codice dalla directory home: il prompt cambiera' immediatamente.
$ source ~/.bashrc

Risorse esterne