Difference between revisions of "Color Bash Prompt (Italiano)"

From ArchWiki
Jump to: navigation, search
m (removed category)
(Riallineamento a pag. int.)
Line 3: Line 3:
 
{{i18n|Color Bash Prompt}}
 
{{i18n|Color Bash Prompt}}
  
==Sommario==
+
Esistono varie possibilità per il proprio prompt di bash e personalizzarlo aiuterà ad essere più produttivi dalla riga di comando. Si possono aggiungere informazioni al proprio prompt, o semplicemente colorarlo per farlo risaltare.
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==
 
==Prompt basilari==
Le seguenti impostazioni sono utili per distinguere il prompt di root da quello di utente normale:
+
Le seguenti impostazioni sono utili per distinguere il prompt di root da quello di utente normale.
+
'''Verde per utenti normali:'''<br>
+
<nowiki> export PS1='\[\e[0;32m\]\u@\h \W]\$\[\e[0m\] '</nowiki>
+
Impostare la variabile <code>PS1</code> nel proprio file <code>~/.bashrc</code> ed esportarla.
+
  
'''Rosso per root:'''<br>
+
*Editare il file di configurazione personale Bash:
  <nowiki>  export PS1='\[\e[0;31m\]\u@\h \W]\$\[\e[0m\] '</nowiki>
+
  $ nano ~/.bashrc
Impostare la variabile <code>PS1</code> nel proprio file <code>/root/.bashrc</code> ed esportarla.
+
  
==Prompt distinti per root e non root==
+
*Decommentare il prompt di default:
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]\$ '
 
  #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:
+
*Aggiungere il seguente prompt verde per gli utenti normali:
sudo vim /root/.bashrc
+
{{cli|1=
Commentare il prompt di default:
+
<span style="color: #0f0">[chiri@zetsubou ~]$</span> <span style="text-decoration: blink;">_</span>
#PS1='[\u@\h \W]\$ '
+
}}
Usare il seguente:
+
  PS1='\[\e[1;32m\][\u@\h \W]\$\[\e[0m\] '
  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:
+
*Editare il file .bashrc per root; copiarlo da /etc/skel in caso non sia già presente:
 +
# nano /root/.bashrc
 +
*Assegnare il prompt rosso per root:
 +
{{cli|1=
 +
<span style="color: #f00">[root@zetsubou ~]#</span> <span style="text-decoration: blink;">_</span>
 +
}}
 +
PS1='\[\e[1;31m\][\u@\h \W]\$\[\e[0m\] '
  
Nero          0;30    Grigio scuro      1;30
+
===Prompt un po' più elaborati===
Blu            0;34    Blu brillante    1;34
+
*Un prompt verde e blu per utenti normali:
Verde          0;32    Verde brillante  1;32
+
{{cli|1=
Ciano          0;36    Ciano brillante  1;36
+
<span style="color: #0a0">chiri</span> <span style="color: #00f">~/docs</span> <span style="color: #0f0">$</span> <span style="color: #fff">echo "sample output text"<br/>
Rosso          0;31    Rosso brillante  1;31
+
sample output text<br/>
Viola          0;35    Viola brillante  1;35
+
</span><span style="color: #0a0">chiri</span> <span style="color: #00f">~/docs</span> <span style="color: #0f0">$</span> <span style="color: #fff"><span style="text-decoration: blink;">_</span></span>
  Marrone        0;33    Giallo            1;33
+
}}
Grigio chiaro  0;37    Bianco            1;37
+
  PS1='\[\e[0;32m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[1;32m\]\$\[\e[m\] \[\e[1;37m\]'
+
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''':
+
Questo visualizzerà un prompt molto piacevole, colorato con un colore di testo bianco brillante.
\[    comuncia una sequenza di caratteri non stampabili
+
\]    termina la sequenza di caratteri non stampabili
+
  
==Personalizzare ulteriormente il proprio prompt==
+
La stringa sopra contiene le impostazioni colore per le sequenze di escape (inizio colorazione: \[\e[color\], fine colorazione: \[\e[m\]) and information placeholders:
  
*Modificare il proprio ~/.bashrc commentando il prompt di default in Arch:
+
* \u - Nome utente. Il prompt originale ha anche \h, che stampa il nome dell'host.
 +
* \w - Attuale percorso assoluto. Usa \W per l'attuale percorso relativo percorso.
 +
* \$ - Il carattere di prompt (es.'#' per root,'$' per gli utenti normali).
  
# PS1='[\u@\h \W]\$ '
+
L'ultimo sequenza di colore, "\[\e[1;37m\]", non è chiusa, in modo che il testo rimanente (tutto quello che è scritto nel terminale, l'output dei programmi e così via) saranno in quel colore (bianco brillante). Può essere auspicabile cambiare questo colore, o cancellare l'ultima sequenza di escape in modo da lasciare l'attuale output con colori inalterati.  
*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:
+
*Un prompt rosso e blu per root:
source ~/.bashrc
+
{{cli|1=
Si potrebbe modificare il proprio /root/.bashrc con un insieme simile di righe, magari con RED a indicare \u (l'utente).
+
<span style="color: #a00">root</span> <span style="color: #00f">~/docs</span> <span style="color: #a00">#</span> <span style="color: #0a0">echo "sample output text"<br/>
 +
sample output text<br/>
 +
</span><span style="color: #a00">root</span> <span style="color: #00f">~/docs</span> <span style="color: #a00">#</span> <span style="color: #0a0"><span style="text-decoration: blink;">_</span></span>
 +
}}
 +
PS1='\[\e[0;31m\]\u\[\e[m\] \[\e[1;34m\]\w\[\e[m\] \[\e[0;31m\]\$ \[\e[m\]\[\e[0;32m\]'
  
 +
Questo darà una denominazione rossa con il testo della console verde.
  
 +
==Prompt avanzati==
  
Di seguito i vari comandi di escape preceduti da backslash, \x (citati dalla pagina di manuale di bash):
+
===Caricamento Stato della memoria per 256 colori===
 +
Questo non è nemmeno superare i limiti... altro che utilizzare "sed" per analizzare memoria e carico medio (usando l'opzione "-u" per il non-buffering), oppure l'arrangiamento per salvare la cronologia al proprio "HISTFILE" dopo ogni comando. Queste soluzioni sono estremamente utili quando si tratta di crash di shell o subshell, ed essenzialmente si tratta solo di far stampare a Bash variabili già note, rendendo l'operazione estremamente veloce rispetto al prompt con i comandi builtin.
  
       Bash permette di personalizzare queste stringhe di prompt inserendo vari caratteri di escape speciali che vengono interpretati come segue:
+
Questo prompt è tratto dall'articolo di AskApache.com, [http://www.askapache.com/linux-unix/bash-power-prompt.html BASH Power Prompt article], che fornisce maggiore profondità ai dettaglii. È particolarmente utile per coloro che vogliono comprenderei terminali a 256 colori, ncurses, termcap e terminfo.
      \a     il carattere ASCII beep (07)
+
 
      \d     la data nel formato "Giorno-della-settimana Mese Data"
+
Questo è per '''terminali a 256 colori''', che è da dove provengono  gli escape '''\033[38;5;22m'''. 
              (e.g., "Tue May 26")
+
{{cli|1=
      \e     un carattere di escape ASCII (033)
+
<span style="color:#0b0">802</span><span style="color:#005f00">/1024MB</span>      <span style="color:#5f00af">1.28 1.20 1.13 3/94 18563</span>
      \h     l'hostname fino al primo `.'
+
<span style="color:#555">[5416:17880 0:70]</span> <span style="color:0bb">05:35:50 Wed Apr 21</span> <span style="color:#555">[</span><span style="color:#2b47ff">srot@host.sqpt.net</span><span style="color:#555">:</span><span style="color:#bbb">/dev/pts/0</span> <span style="color:#00bb00">+1</span><span style="color:#555">]</span> <span style="color:#FFF">~<br />
      \H     l'hostname
+
(1:70)$ <span style="text-decoration: blink;">_</span></span>
      \n     il carattere "newline"
+
}}
      \r     il carattere "carriage return"
+
 
      \s     il nome della shell, il nome base di $0
+
  PROMPT_COMMAND='history -a;echo -en "\033[m\033[38;5;2m"$(( `sed -nu "s/MemFree:[\t ]\+\([0-9]\+\) kB/\1/p" /proc/meminfo`/1024))"\033[38;5;22m/"$((`sed -nu "s/MemTotal:[\t ]\+\([0-9]\+\) kB/\1/Ip" /proc/meminfo`/1024 ))MB"\t\033[m\033[38;5;55m$(< /proc/loadavg)\033[m"'
 +
  PS1='\[\e[m\n\e[1;30m\][$$:$PPID \j:\!\[\e[1;30m\]]\[\e[0;36m\] \T \d \[\e[1;30m\][\[\e[1;34m\]\u@\H\[\e[1;30m\]:\[\e[0;37m\]${SSH_TTY} \[\e[0;32m\]+${SHLVL}\[\e[1;30m\]] \[\e[1;37m\]\w\[\e[0;37m\] \n($SHLVL:\!)\$ '
 +
 
 +
 
 +
 
 +
 
 +
===Lista di colori per il prompt e Bash===
 +
Aggiungere questo al file Bash per definire i colori per il prompt e i comandi:
 +
<pre>txtblk='\e[0;30m' # Nero - Regular
 +
txtred='\e[0;31m' # Rosso
 +
txtgrn='\e[0;32m' # Verde
 +
txtylw='\e[0;33m' # Giallo
 +
txtblu='\e[0;34m' # Blu
 +
txtpur='\e[0;35m' # Viola
 +
txtcyn='\e[0;36m' # Ciano
 +
txtwht='\e[0;37m' # Bianco
 +
bldblk='\e[1;30m' # Nero - Bold
 +
bldred='\e[1;31m' # Rosso
 +
bldgrn='\e[1;32m' # Verde
 +
bldylw='\e[1;33m' # Giallo
 +
bldblu='\e[1;34m' # Blu
 +
bldpur='\e[1;35m' # Viola
 +
bldcyn='\e[1;36m' # Ciano
 +
bldwht='\e[1;37m' # Bianco
 +
unkblk='\e[4;30m' # Nero - Underline
 +
undred='\e[4;31m' # Rosso
 +
undgrn='\e[4;32m' # Verde
 +
undylw='\e[4;33m' # Giallo
 +
undblu='\e[4;34m' # Blu
 +
undpur='\e[4;35m' # Viola
 +
undcyn='\e[4;36m' # Ciano
 +
undwht='\e[4;37m' # Bianco
 +
bakblk='\e[40m'  # Nero - Background
 +
bakred='\e[41m'  # Rosso
 +
badgrn='\e[42m'  # Verde
 +
bakylw='\e[43m'  # Giallo
 +
bakblu='\e[44m'  # Blu
 +
bakpur='\e[45m'  # Viola
 +
bakcyn='\e[46m'  # Ciano
 +
bakwht='\e[47m'  # Bianco
 +
txtrst='\e[0m'    # Text Reset</pre>
 +
 
 +
<br/>
 +
O se si preferiscono i nomi dei colori o si vogliono colori ad alta intensità:
 +
<pre># Reset
 +
Color_Off='\e[0m'       # Text Reset
 +
 
 +
# Regular Colors
 +
Black='\e[0;30m'        # Nero
 +
Red='\e[0;31m'          # Rosso
 +
Green='\e[0;32m'        # Verde
 +
Yellow='\e[0;33m'      # Giallo
 +
Blue='\e[0;34m'        # Blu
 +
Purple='\e[0;35m'      # Viola
 +
Cyan='\e[0;36m'        # Ciano
 +
White='\e[0;37m'        # Bianco
 +
 
 +
# Bold
 +
BBlack='\e[1;30m'      # Nero
 +
BRed='\e[1;31m'        # Rosso
 +
BGreen='\e[1;32m'      # Verde
 +
BYellow='\e[1;33m'      # Giallo
 +
BBlue='\e[1;34m'        # Blu
 +
BPurple='\e[1;35m'      # Viola
 +
BCyan='\e[1;36m'        # Ciano
 +
BWhite='\e[1;37m'      # Bianco
 +
 
 +
# Underline
 +
UBlack='\e[4;30m'      # Nero
 +
URed='\e[4;31m'        # Rosso
 +
UGreen='\e[4;32m'      # Verde
 +
UYellow='\e[4;33m'      # Giallo
 +
UBlue='\e[4;34m'        # Blu
 +
UPurple='\e[4;35m'      # Viola
 +
UCyan='\e[4;36m'        # Ciano
 +
UWhite='\e[4;37m'      # Bianco
 +
 
 +
# Background
 +
On_Black='\e[40m'      # Nero
 +
On_Red='\e[41m'        # Rosso
 +
On_Green='\e[42m'      # Verde
 +
On_Yellow='\e[43m'      # Giallo
 +
On_Blue='\e[44m'        # Blu
 +
On_Purple='\e[45m'      # Purple
 +
On_Cyan='\e[46m'        # Ciano
 +
On_White='\e[47m'      # Bianco
 +
 
 +
# High Intensty
 +
IBlack='\e[0;90m'      # Nero
 +
IRed='\e[0;91m'        # Rosso
 +
IGreen='\e[0;92m'      # Verde
 +
IYellow='\e[0;93m'      # Giallo
 +
IBlue='\e[0;94m'        # Blu
 +
IPurple='\e[0;95m'      # Viola
 +
ICyan='\e[0;96m'        # Ciano
 +
IWhite='\e[0;97m'      # Bianco
 +
 
 +
# Bold High Intensty
 +
BIBlack='\e[1;90m'      # Nero
 +
BIRed='\e[1;91m'        # Rosso
 +
BIGreen='\e[1;92m'      # Verde
 +
BIYellow='\e[1;93m'    # Giallo
 +
BIBlue='\e[1;94m'      # Blu
 +
BIPurple='\e[1;95m'    # Viola
 +
BICyan='\e[1;96m'      # Ciano
 +
BIWhite='\e[1;97m'      # Bianco
 +
 
 +
# High Intensty backgrounds
 +
On_IBlack='\e[0;100m'  # Nero
 +
On_IRed='\e[0;101m'    # Rosso
 +
On_IGreen='\e[0;102m'  # Verde
 +
On_IYellow='\e[0;103m'  # Giallo
 +
On_IBlue='\e[0;104m'    # Blu
 +
On_IPurple='\e[10;95m'  # Viola
 +
On_ICyan='\e[0;106m'    # Ciano
 +
On_IWhite='\e[0;107m'  # Bianco
 +
</pre>
 +
 
 +
Per utilizzare i comandi dal proprio ambiente shell:
 +
$ echo -e "${txtblu}test"
 +
<font color='blue'>test</font>
 +
$ echo -e "${bldblu}test"
 +
<font color='lightblue'><b>test</b></font>
 +
$ echo -e "${undblu}test"
 +
<font color='lightblue'><b><u>test</u></b></font>
 +
$ echo -e "${bakblu}test"
 +
<span style="color: white; background-color: lightblue"><b>test</b></span>
 +
 
 +
Per utilizzare nei prompt (notare le virgolette e la barra <nowiki>\[ \]</nowiki> usati dalla shell per calcolare la lunghezza corretta):
 +
PS1="\[$txtblu\]foo\[$txtred\] bar\[$txtrst\] baz : "
 +
 
 +
===Prompt di escape===
 +
Di seguito i vari comandi di escape elencati nella pagina di manuale di bash:
 +
Bash permette che queste stringhe di prompt possano essere personalizzate inserendo un
 +
numero di ''backslash-escaped special characters'' che vengono interpretati come segue:
 +
 +
  \a         il carattere ASCII beep (07)
 +
  \d         la data nel formato "Giorno-della-settimana Mese Data"
 +
  \D{format} the format is passed to strftime(3) and the result
 +
              is inserted into the prompt string an empty format
 +
              results in a locale-specific time representation.
 +
              The braces are required
 +
  \e         un carattere di escape ASCII (033)
 +
  \h         l'hostname fino al primo `.'
 +
  \H         l'hostname
 +
  \j        the number of jobs currently managed by the shell
 +
  \l        the basename of the shell's terminal device name
 +
  \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)
 
               (la parte che segue lo slash finale)
      \t     l'ora corrente nel formato 24-ore HH:MM:SS
+
  \t         l'ora corrente nel formato 24-ore HH:MM:SS
      \T     l'ora corrente nel formato 12-ore HH:MM:SS
+
  \T         l'ora corrente nel formato 12-ore HH:MM:SS
      \@     l'ora corrente nel formato 12-ore am/pm
+
  \@         l'ora corrente nel formato 12-ore am/pm
      \u     lo username dell'utente corrente
+
  \A        the current time in 24-hour HH:MM format
      \v     la versione di bash (e.g., 2.00)
+
  \u         lo username dell'utente corrente
      \V     la release di bash, versione + patchlevel
+
  \v         la versione di bash (e.g., 2.00)
               (e.g., 2.00.0)
+
  \V         la release di bash, versione + patchlevel
      \w     la directory di lavoro corrente
+
               (es, 2.00.0)
      \W     il nome di base della directory di lavoro corrente
+
  \w         la directory di lavoro corrente, con $HOME abbreviato con una tilde
      \!     il numero cronologico (history number) di questo comando
+
  \W         il nome di base della directory di lavoro corrente
      \#     il numero di questo comando
+
              abbreviato con una tilde
      \$     se l'UID effettivo è 0, un #, altrimenti un $
+
  \!         il numero cronologico (history number) di questo comando
      \nnn   il carattere corrispondente al numero ottale nnn
+
  \#         il numero di questo comando
      \\     un backslash
+
  \$         se l'UID effettivo è 0, un #, altrimenti un $
      \[     comuncia una sequenza di caratteri non stampabili, che
+
  \nnn       il carattere corrispondente al numero ottale nnn
 +
  \\         un backslash
 +
  \[         comincia una sequenza di caratteri non stampabili, che
 
               potrebbero essere usati per inserire una sequenza di
 
               potrebbero essere usati per inserire una sequenza di
 
               controllo del terminale nel prompt
 
               controllo del terminale nel prompt
      \]     termina la sequenza di caratteri non stampabili
+
  \]         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 è la sua posizione
+
  Il numero di comando e il numero della cronologia sono usualmente diversi:  
      nella lista della cronologia, che potrebbe includere comandi reintegrati dal file di cronologia (vedere HISTORY di seguito), mentre il
+
  il numero della cronologia di una comando è la sua posizione nella lista della  
      numero di comando è la posizione nella sequenza di comandi eseguiti durante la sessione di shell attuale. Dopo che la stringa sia stata
+
  cronologia, che potrebbe includere comandi reintegrati dal file di cronologia  
      decodificata, e' espansa attraverso espansione di parametri, sostituzione di comandi, espansione aritmetica, rimozione di apici, soggetta
+
  (vedere HISTORY di seguito), mentre il numero di comando è la posizione nella  
      al valore delle opzioni di promptvars della shell (vedere la descrizione del comando shopt sotto SHELL BUILTIN COMMANDS, di seguito).
+
  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).
  
== Visualizzare il valore di ritorno ==
+
===Posizionamento del cursore===
Si può aggiungere questa riga alla fine del proprio .bashrc se si desidera vedere il valore di ritorno dell'ultimo comando eseguito. Dovrebbe funzionare con ogni tipo di prompt finchè non si ha bisogno di PROMPT_COMMAND.
+
La sequenza che segue imposta la posizione del cursore:
  <nowiki>PROMPT_COMMAND='if [[ $? = 0 ]]; then echo -ne "\033[0;32m$?\033[0m ;)"; else echo -ne "\033[0;31m$?\033[0m ;("; fi; echo -n " "'</nowiki>
+
  \[\033[<row>;<column>f\]
  
Il risultato assomiglierà a questo:
+
La posizione del cursore può essere salvata utilizzando:
  <font color="green">0</font><b>;-)</b>harvie@harvie-ntb ~/ $ true
+
  \[\033[s\]
<font color="green">0</font><b>;-)</b>harvie@harvie-ntb ~/ $ false
+
<font color="red">1</font><b>;-(</b>harvie@harvie-ntb ~/ $
+
Lo zero è in verde, tutti gli altri valori in rosso. C'è anche uno smiley (rimpiazzabile con ciò che si desidera), così la nostra bash sorriderà se l'ultima operazione è terminata con successo.
+
  
 +
Per ripristinare una posizione, utilizzare la seguente sequenza:
 +
\[\033[u\]
  
==Esempi di prompt avanzati==
+
L'esempio seguente utilizza queste sequenze per visualizzare l'ora in alto a destra:
===Prompt di Wolfman===
+
PS1=">\[\033[s\]\[\033[1;\$((COLUMNS-4))f\]\$(date +%H:%M)\[\033[u\]"
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 <code>.bashrc</code>, all'interno della home.
+
  
*Si commenta il prompt di default di Arch.
+
La variabile d'ambiente ''COLUMNS'' contiene il numero di colonne del terminale. The above example substracts 4 from its value in order to justify the five character wide output of ''date'' at the right border.
# 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 [http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x783.html Controlling the Size and Appearance of $PWD] e modificato per sostituire la directory home dell'utente con una tilde.
+
===Visualizzazione valore di ritorno===
 +
 
 +
ATTENZIONE<br>
 +
Questo è sembrato non essere esente da bug, vedere la voce aggiunta alla pagina di discussione.
 +
 
 +
Aggiungere questa riga se si desidera vedere il valore di ritorno dell'ultimo comando eseguito. Questo dovrebbe funzionare con qualsiasi tipo di prompt fino a quando non ha bisogno di PROMPT_COMMAND:
 +
<nowiki>PROMPT_COMMAND='RET=$?; if [[ $RET -eq 0 ]]; then echo -ne "\033[0;32m$RET\033[0m ;)"; else echo -ne "\033[0;31m$RET\033[0m ;("; fi; echo -n " "'</nowiki>
 +
 
 +
E sarà simile a questo:
 +
<font color="green">0</font><b> ;) </b>harvie@harvie-ntb ~/ $ true
 +
<font color="green">0</font><b> ;) </b>harvie@harvie-ntb ~/ $ false
 +
<font color="red">1</font><b> ;( </b>harvie@harvie-ntb ~/ $
 +
Zero è verde e non-zero è di colore rosso. C'è anche l'indicazione smiley (sostituirlo con quello che si preferisce); così il prompt sorriderà se l'ultima operazione ha avuto successo.
 +
 
 +
====Visualizzazione del valore di ritorno avanzata====
 +
Se si vogliono i colori, è necessario impostare i valori ''$RED'' e ''$GREEN'':
 +
RED='\e[0;31m'
 +
GREEN='\e[0;32m'
 +
 
 +
È necessario specificare questi valori nei file di configurazione di Bash:
 +
<pre>
 +
#return value visualisation
 +
PROMPT_COMMAND='RET=$?;'
 +
RET_VALUE='$(echo $RET)' #Ret value not colorized - you can modify it.
 +
RET_SMILEY='$(if [[ $RET = 0 ]]; then echo -ne "\[$GREEN\];)"; else echo -ne "\[$RED\];("; fi;)'
 +
</pre>
 +
 
 +
Quindi è possibile utilizzare le variabili ''$RET_VALUE'' e ''$RET_SMILEY'' nel prompt. Si noti che è necessario usare le virgolette:
 +
#prompt
 +
PS1="$RET_VALUE $RET_SMILEY : "
 +
 
 +
Questo darà un prompt di base:
 +
0 <font color="green">;)</font> : true
 +
0 <font color="green">;)</font> : false
 +
1 <font color="red">;(</font> :
 +
 
 +
Ma probabilmente si desidera utilizzare ''$RET_VALUE'' or ''$RET_SMILEY'' nel proprio prompt, così:
 +
<pre>
 +
PS1="\[$WHITE\]$RET_VALUE $RET_SMILEY \[$BLUE\]\u\[$RED\]@\[$EBLUE\]\h\[$WHITE\] \W \[$ERED\]\\$\[$EWHITE\] "
 +
</pre>
 +
 
 +
===Prompt di Wolfman===
 +
Dopo aver letto la maggior parte dei [http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/index.html Bash Prompt Howto], l'autore ha sviluppato questo prompt di Bash che 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 file {{Filename|~/.bashrc}}.
 +
 
 +
*Aggiungere 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 è tratto dalla sezione ''Bash Prompt Howto''<nowiki>'s</nowiki> section on [http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x783.html Controlling the Size and Appearance of $PWD] e modificato per sostituire la directory home dell'utente con una tilde.
 
  ##################################################
 
  ##################################################
 
  # Fancy PWD display function
 
  # Fancy PWD display function
Line 156: Line 338:
 
  }
 
  }
  
*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.
+
*Questo codice genera il prompt dei comandi in cui sono definiti un paio di colori. Il colore dell'utente per il nome utente, l'hostname e il prompt ($ o #) è impostato a ciano, mentre se l'utente è root (l'UID di root è sempre 0), imposta il colore a rosso. Il prompt dei comandi è una versione colorata del prompt di default di Arch, con NEW_PWD proveniente 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.
+
 
 +
: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 per la corretta separazione di righe.
 
  bash_prompt() {
 
  bash_prompt() {
 
     case $TERM in
 
     case $TERM in
Line 207: Line 390:
 
  }
 
  }
  
*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.
+
*Infine, aggiungere questo codice, il quale 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
 
  PROMPT_COMMAND=bash_prompt_command
 
  bash_prompt
 
  bash_prompt
 
  unset bash_prompt
 
  unset bash_prompt
  
*Se si vogliono sperimentare i colori del prompt, aprire il proprio file <code>.bashrc</code> 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.
+
===Prompt di KitchM===
  $ source ~/.bashrc
+
Questi prompt offrono una maggiore chiarezza visiva e testo lampeggiante.  Si noti che l'uso del colore rosso nel prompt dell'utente root potrebbe dare luogo a indicazioni di attenzione.
 +
 
 +
'''Innanzi tutto''', cambiare lo sfondo di default nelle prefernze del terminale (In questo esempio si usa iul terminal di Xfce) a #D2D2D2, ed il colore del testo a #000000.  I font sono impostati come DejaVu Sans Mono Book 12.  Il colore del cursore è #00AA00, e il colore dell'attività dei tab è #AF0000.
 +
 
 +
'''Poi''', in ~/.bashrc and right after the PS1= line, enter a new line with the following:
 +
PS1='\e[1;33;47m\u \e[1;32;47mon \h \e[1;35;47m\d \@\e[0;0m\n\e[1;34m[dir.= \w] \# > \e[0;0m'
 +
And then place a # in front of the first PS1 line to remark it out.
 +
 
 +
'''Third''', for root user, edit /root/.bashrc in the same manner to include:
 +
PS1='\e[1;31;47m\u \e[1;32;47mon \h \e[1;35;47m\d \@\e[0;0m\n\e[1;31m[dir.= \w] \# > \e[0;0m'
 +
Non dimenticare di commentare la riga vecchia.
 +
 
 +
These are double-line prompts, e che dovrebbero essere simili a questi:
 +
 
 +
User-
 +
<span style="color:#D2D2D2; background:#D2D2D2">                                          </span>
 +
<span style="color:#FFFF00; background:#A9A9A9"><b>Username</b></span><span style="color:#00FF00; background:#A9A9A9"><b> on myhost</b></span><span style="color:#FF00FF; background:#A9A9A9"><b> Sun Jan 15 12:30 PM</b></span><span style="color:#D2D2D2; background:#D2D2D2">    </span>
 +
<span style="color:#0000FF; background:#D2D2D2"><b>[dir.= /home/username] 1 >                </b> </span>
 +
<span style="color:#D2D2D2; background:#D2D2D2">                                          </span>
 +
 
 +
Root-
 +
<span style="color:#D2D2D2; background:#D2D2D2">                                          </span>
 +
<span style="color:#FF0000; background:#A9A9A9"><b>Root</b></span><span style="color:#00FF00; background:#A9A9A9"><b> on myhost</b> </span><span style="color:#FF00FF; background:#A9A9A9"><b> Sun Jan 15 12:30 PM</b> </span><span style="color:#D2D2D2; background:#D2D2D2">      </span> 
 +
<span style="color:#FF0000; background:#D2D2D2"><b>[dir.= /etc/rc.d] 1 >                    </b> </span>
 +
<span style="color:#D2D2D2; background:#D2D2D2">                                          </span>
 +
 
 +
Si noterà che i colori di sfondo renderanno più confortevole la lettura, ed i colori del testo manterranno le cose "interessanti". There is a lot of leeway to make them personalized, just with the use of colors.  Enjoy!
 +
 
 +
==Impostazione titolo finestra==
 +
[[Xterm]] e molti altri emulatori di terminale (PuTTY incluso) consentono di impostare il titolo della finestra utilizzando speciali sequenze di escape.  Si possono impostare le variabili {{Codeline|<nowiki>${XTERM_TITLE}</nowiki>}} come segue, poi inserirle all'inizio del prompt per impostare il titolo di [[xterm]] (se disponibile) su directory@user@hostname:
 +
 
 +
#set xterm title
 +
case "$TERM" in
 +
  xterm | xterm-color)
 +
    XTERM_TITLE='\[\e]0;\W@\u@\H\a\]'
 +
  ;;
 +
esac
 +
 
 +
The text between <code>0;</code> and <code>\a</code> can be set to anything you like, for example:
 +
export PS1='\[\e]0;Welcome to ArchLinux\a\]\$>> '
 +
sets the window title to "Welcome to ArchLinux" and displays this simple prompt:
 +
{{cli|1=
 +
<span style="color: #FFF">$>></span> <span style="text-decoration: blink;">_</span>
 +
}}
 +
 
 +
==Different colors for text entry and console output==
 +
If you do not reset the text color at the end of your prompt, both the text you enter and the console text will simply stay in that color. If you want to edit text in a special color but still use the default color for command output, you will need to reset the color after you press enter, but still before any commands get run. You can do this by installing a DEBUG trap in your ~/.bashrc, like this:
 +
 
 +
trap 'echo -ne "\e[0m"' DEBUG
 +
 
 +
==Esempi di bashrc da Gentoo==
 +
<pre># /etc/bash.bashrc
 +
#
 +
# This file is sourced by all *interactive* bash shells on startup,
 +
# including some apparently interactive shells such as scp and rcp
 +
# that can't tolerate any output. So make sure this doesn't display
 +
# anything or bad things will happen !
 +
 
 +
 
 +
# Test for an interactive shell.  There is no need to set anything
 +
# past this point for scp and rcp, and it's important to refrain from
 +
# outputting anything in those cases.
 +
 
 +
if [[ $- != *i* ]] ; then
 +
# Shell is non-interactive.  Be done now!
 +
return
 +
fi
 +
 
 +
# Bash won't get SIGWINCH if another process is in the foreground.
 +
# Enable checkwinsize so that bash will check the terminal size when
 +
# it regains control.  #65623
 +
# http://cnswww.cns.cwru.edu/~chet/bash/FAQ (E11)
 +
shopt -s checkwinsize
 +
 
 +
# Enable history appending instead of overwriting.  #139609
 +
shopt -s histappend
 +
 
 +
# Change the window title of X terminals
 +
case ${TERM} in
 +
xterm*|rxvt*|Eterm|aterm|kterm|gnome*|interix)
 +
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
 +
;;
 +
screen)
 +
PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\033\\"'
 +
;;
 +
esac
 +
 
 +
use_color=false
 +
 
 +
# Set colorful PS1 only on colorful terminals.
 +
# dircolors --print-database uses its own built-in database
 +
# instead of using /etc/DIR_COLORS.  Try to use the external file
 +
# first to take advantage of user additions.  Use internal bash
 +
# globbing instead of external grep binary.
 +
safe_term=${TERM//[^[:alnum:]]/?}  # sanitize TERM
 +
match_lhs=""
 +
[[ -f ~/.dir_colors  ]] && match_lhs="${match_lhs}$(<~/.dir_colors)"
 +
[[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(</etc/DIR_COLORS)"
 +
[[ -z ${match_lhs}    ]] \
 +
&& type -P dircolors >/dev/null \
 +
&& match_lhs=$(dircolors --print-database)
 +
[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true
 +
 
 +
if ${use_color} ; then
 +
# Enable colors for ls, etc.  Prefer ~/.dir_colors #64489
 +
if type -P dircolors >/dev/null ; then
 +
if [[ -f ~/.dir_colors ]] ; then
 +
eval $(dircolors -b ~/.dir_colors)
 +
elif [[ -f /etc/DIR_COLORS ]] ; then
 +
eval $(dircolors -b /etc/DIR_COLORS)
 +
fi
 +
fi
 +
 
 +
if [[ ${EUID} == 0 ]] ; then
 +
PS1='\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '
 +
else
 +
PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] '
 +
fi
 +
 
 +
alias ls='ls --color=auto'
 +
alias grep='grep --colour=auto'
 +
else
 +
if [[ ${EUID} == 0 ]] ; then
 +
# show root@ when we do not have colors
 +
PS1='\u@\h \W \$ '
 +
else
 +
PS1='\u@\h \w \$ '
 +
fi
 +
fi
 +
 
 +
# Try to keep environment pollution down, EPA loves us.
 +
unset use_color safe_term match_lhs</pre>
 +
 
 +
==Vedere anche==
 +
[http://aur.archlinux.org/packages.php?ID=18418 gentoo-bashrc] da [[AUR]]
  
== Risorse esterne ==
+
==Risorse esterne==
* [http://bbs.archlinux.org/viewtopic.php?t=1817 Discussione sul forum inglese]
+
* Discussioni dei forum:
* [http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html Bash Prompt HOWTO]
+
** [http://bbs.archlinux.org/viewtopic.php?id=1817 BASH prompt]
 +
** [http://bbs.archlinux.org/viewtopic.php?id=50885 What's your PS1?]
 +
* http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html
 +
* [http://gilesorr.com/bashprompt/prompts/index.html Giles Orr's collection of sample prompts]

Revision as of 19:24, 18 October 2011

This template has only maintenance purposes. For linking to local translations please use interlanguage links, see Help:i18n#Interlanguage links.


Local languages: Català – Dansk – English – Español – Esperanto – Hrvatski – Indonesia – Italiano – Lietuviškai – Magyar – Nederlands – Norsk Bokmål – Polski – Português – Slovenský – Česky – Ελληνικά – Български – Русский – Српски – Українська – עברית – العربية – ไทย – 日本語 – 正體中文 – 简体中文 – 한국어


External languages (all articles in these languages should be moved to the external wiki): Deutsch – Français – Română – Suomi – Svenska – Tiếng Việt – Türkçe – فارسی

Esistono varie possibilità per il proprio prompt di bash e personalizzarlo aiuterà ad essere più produttivi dalla riga 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.

  • Editare il file di configurazione personale Bash:
$ nano ~/.bashrc
  • Decommentare il prompt di default:
#PS1='[\u@\h \W]\$ '
  • Aggiungere il seguente prompt verde per gli utenti normali:

Template:Cli

PS1='\[\e[1;32m\][\u@\h \W]\$\[\e[0m\] '
  • Editare il file .bashrc per root; copiarlo da /etc/skel in caso non sia già presente:
# nano /root/.bashrc
  • Assegnare il prompt rosso per root:

Template:Cli

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

Prompt un po' più elaborati

  • Un prompt verde e blu per utenti normali:

Template:Cli

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

Questo visualizzerà un prompt molto piacevole, colorato con un colore di testo bianco brillante.

La stringa sopra contiene le impostazioni colore per le sequenze di escape (inizio colorazione: \[\e[color\], fine colorazione: \[\e[m\]) and information placeholders:

  • \u - Nome utente. Il prompt originale ha anche \h, che stampa il nome dell'host.
  • \w - Attuale percorso assoluto. Usa \W per l'attuale percorso relativo percorso.
  • \$ - Il carattere di prompt (es.'#' per root,'$' per gli utenti normali).

L'ultimo sequenza di colore, "\[\e[1;37m\]", non è chiusa, in modo che il testo rimanente (tutto quello che è scritto nel terminale, l'output dei programmi e così via) saranno in quel colore (bianco brillante). Può essere auspicabile cambiare questo colore, o cancellare l'ultima sequenza di escape in modo da lasciare l'attuale output con colori inalterati.

  • Un prompt rosso e blu per root:

Template:Cli

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

Questo darà una denominazione rossa con il testo della console verde.

Prompt avanzati

Caricamento Stato della memoria per 256 colori

Questo non è nemmeno superare i limiti... altro che utilizzare "sed" per analizzare memoria e carico medio (usando l'opzione "-u" per il non-buffering), oppure l'arrangiamento per salvare la cronologia al proprio "HISTFILE" dopo ogni comando. Queste soluzioni sono estremamente utili quando si tratta di crash di shell o subshell, ed essenzialmente si tratta solo di far stampare a Bash variabili già note, rendendo l'operazione estremamente veloce rispetto al prompt con i comandi builtin.

Questo prompt è tratto dall'articolo di AskApache.com, BASH Power Prompt article, che fornisce maggiore profondità ai dettaglii. È particolarmente utile per coloro che vogliono comprenderei terminali a 256 colori, ncurses, termcap e terminfo.

Questo è per terminali a 256 colori, che è da dove provengono gli escape \033[38;5;22m. Template:Cli

 PROMPT_COMMAND='history -a;echo -en "\033[m\033[38;5;2m"$(( `sed -nu "s/MemFree:[\t ]\+\([0-9]\+\) kB/\1/p" /proc/meminfo`/1024))"\033[38;5;22m/"$((`sed -nu "s/MemTotal:[\t ]\+\([0-9]\+\) kB/\1/Ip" /proc/meminfo`/1024 ))MB"\t\033[m\033[38;5;55m$(< /proc/loadavg)\033[m"'
 PS1='\[\e[m\n\e[1;30m\][$$:$PPID \j:\!\[\e[1;30m\]]\[\e[0;36m\] \T \d \[\e[1;30m\][\[\e[1;34m\]\u@\H\[\e[1;30m\]:\[\e[0;37m\]${SSH_TTY} \[\e[0;32m\]+${SHLVL}\[\e[1;30m\]] \[\e[1;37m\]\w\[\e[0;37m\] \n($SHLVL:\!)\$ '
 


Lista di colori per il prompt e Bash

Aggiungere questo al file Bash per definire i colori per il prompt e i comandi:

txtblk='\e[0;30m' # Nero - Regular
txtred='\e[0;31m' # Rosso
txtgrn='\e[0;32m' # Verde
txtylw='\e[0;33m' # Giallo
txtblu='\e[0;34m' # Blu
txtpur='\e[0;35m' # Viola
txtcyn='\e[0;36m' # Ciano
txtwht='\e[0;37m' # Bianco
bldblk='\e[1;30m' # Nero - Bold
bldred='\e[1;31m' # Rosso
bldgrn='\e[1;32m' # Verde
bldylw='\e[1;33m' # Giallo
bldblu='\e[1;34m' # Blu
bldpur='\e[1;35m' # Viola
bldcyn='\e[1;36m' # Ciano
bldwht='\e[1;37m' # Bianco
unkblk='\e[4;30m' # Nero - Underline
undred='\e[4;31m' # Rosso
undgrn='\e[4;32m' # Verde
undylw='\e[4;33m' # Giallo
undblu='\e[4;34m' # Blu
undpur='\e[4;35m' # Viola
undcyn='\e[4;36m' # Ciano
undwht='\e[4;37m' # Bianco
bakblk='\e[40m'   # Nero - Background
bakred='\e[41m'   # Rosso
badgrn='\e[42m'   # Verde
bakylw='\e[43m'   # Giallo
bakblu='\e[44m'   # Blu
bakpur='\e[45m'   # Viola
bakcyn='\e[46m'   # Ciano
bakwht='\e[47m'   # Bianco
txtrst='\e[0m'    # Text Reset


O se si preferiscono i nomi dei colori o si vogliono colori ad alta intensità:

# Reset
Color_Off='\e[0m'       # Text Reset

# Regular Colors
Black='\e[0;30m'        # Nero
Red='\e[0;31m'          # Rosso
Green='\e[0;32m'        # Verde
Yellow='\e[0;33m'       # Giallo
Blue='\e[0;34m'         # Blu
Purple='\e[0;35m'       # Viola
Cyan='\e[0;36m'         # Ciano
White='\e[0;37m'        # Bianco

# Bold
BBlack='\e[1;30m'       # Nero
BRed='\e[1;31m'         # Rosso
BGreen='\e[1;32m'       # Verde
BYellow='\e[1;33m'      # Giallo
BBlue='\e[1;34m'        # Blu
BPurple='\e[1;35m'      # Viola
BCyan='\e[1;36m'        # Ciano
BWhite='\e[1;37m'       # Bianco

# Underline
UBlack='\e[4;30m'       # Nero
URed='\e[4;31m'         # Rosso
UGreen='\e[4;32m'       # Verde
UYellow='\e[4;33m'      # Giallo
UBlue='\e[4;34m'        # Blu
UPurple='\e[4;35m'      # Viola
UCyan='\e[4;36m'        # Ciano
UWhite='\e[4;37m'       # Bianco

# Background
On_Black='\e[40m'       # Nero
On_Red='\e[41m'         # Rosso
On_Green='\e[42m'       # Verde
On_Yellow='\e[43m'      # Giallo
On_Blue='\e[44m'        # Blu
On_Purple='\e[45m'      # Purple
On_Cyan='\e[46m'        # Ciano
On_White='\e[47m'       # Bianco

# High Intensty
IBlack='\e[0;90m'       # Nero
IRed='\e[0;91m'         # Rosso
IGreen='\e[0;92m'       # Verde
IYellow='\e[0;93m'      # Giallo
IBlue='\e[0;94m'        # Blu
IPurple='\e[0;95m'      # Viola
ICyan='\e[0;96m'        # Ciano
IWhite='\e[0;97m'       # Bianco

# Bold High Intensty
BIBlack='\e[1;90m'      # Nero
BIRed='\e[1;91m'        # Rosso
BIGreen='\e[1;92m'      # Verde
BIYellow='\e[1;93m'     # Giallo
BIBlue='\e[1;94m'       # Blu
BIPurple='\e[1;95m'     # Viola
BICyan='\e[1;96m'       # Ciano
BIWhite='\e[1;97m'      # Bianco

# High Intensty backgrounds
On_IBlack='\e[0;100m'   # Nero
On_IRed='\e[0;101m'     # Rosso
On_IGreen='\e[0;102m'   # Verde
On_IYellow='\e[0;103m'  # Giallo
On_IBlue='\e[0;104m'    # Blu
On_IPurple='\e[10;95m'  # Viola
On_ICyan='\e[0;106m'    # Ciano
On_IWhite='\e[0;107m'   # Bianco

Per utilizzare i comandi dal proprio ambiente shell:

$ echo -e "${txtblu}test"
test
$ echo -e "${bldblu}test"
test
$ echo -e "${undblu}test"
test
$ echo -e "${bakblu}test"
test

Per utilizzare nei prompt (notare le virgolette e la barra \[ \] usati dalla shell per calcolare la lunghezza corretta):

PS1="\[$txtblu\]foo\[$txtred\] bar\[$txtrst\] baz : "

Prompt di escape

Di seguito i vari comandi di escape elencati nella pagina di manuale di bash:

Bash permette che queste stringhe di prompt possano essere personalizzate inserendo un
numero di backslash-escaped special characters che vengono interpretati come segue:

  \a         il carattere ASCII beep (07)
  \d         la data nel formato "Giorno-della-settimana Mese Data"
  \D{format} the format is passed to strftime(3) and the result
             is inserted into the prompt string an empty format
             results in a locale-specific time representation.
             The braces are required
  \e         un carattere di escape ASCII (033)
  \h         l'hostname fino al primo `.'
  \H         l'hostname
  \j         the number of jobs currently managed by the shell
  \l         the basename of the shell's terminal device name
  \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
  \A         the current time in 24-hour HH:MM format
  \u         lo username dell'utente corrente
  \v         la versione di bash (e.g., 2.00)
  \V         la release di bash, versione + patchlevel
             (es, 2.00.0)
  \w         la directory di lavoro corrente, con $HOME abbreviato con una tilde
  \W         il nome di base della directory di lavoro corrente
             abbreviato con una tilde
  \!         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
  \[         comincia 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 è 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 è 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).

Posizionamento del cursore

La sequenza che segue imposta la posizione del cursore:

\[\033[<row>;<column>f\]

La posizione del cursore può essere salvata utilizzando:

\[\033[s\]

Per ripristinare una posizione, utilizzare la seguente sequenza:

\[\033[u\]

L'esempio seguente utilizza queste sequenze per visualizzare l'ora in alto a destra:

PS1=">\[\033[s\]\[\033[1;\$((COLUMNS-4))f\]\$(date +%H:%M)\[\033[u\]"

La variabile d'ambiente COLUMNS contiene il numero di colonne del terminale. The above example substracts 4 from its value in order to justify the five character wide output of date at the right border.

Visualizzazione valore di ritorno

ATTENZIONE
Questo è sembrato non essere esente da bug, vedere la voce aggiunta alla pagina di discussione.

Aggiungere questa riga se si desidera vedere il valore di ritorno dell'ultimo comando eseguito. Questo dovrebbe funzionare con qualsiasi tipo di prompt fino a quando non ha bisogno di PROMPT_COMMAND:

PROMPT_COMMAND='RET=$?; if [[ $RET -eq 0 ]]; then echo -ne "\033[0;32m$RET\033[0m ;)"; else echo -ne "\033[0;31m$RET\033[0m ;("; fi; echo -n " "'

E sarà simile a questo:

0 ;) harvie@harvie-ntb ~/ $ true
0 ;) harvie@harvie-ntb ~/ $ false
1 ;( harvie@harvie-ntb ~/ $ 

Zero è verde e non-zero è di colore rosso. C'è anche l'indicazione smiley (sostituirlo con quello che si preferisce); così il prompt sorriderà se l'ultima operazione ha avuto successo.

Visualizzazione del valore di ritorno avanzata

Se si vogliono i colori, è necessario impostare i valori $RED e $GREEN:

RED='\e[0;31m'
GREEN='\e[0;32m'

È necessario specificare questi valori nei file di configurazione di Bash:

#return value visualisation
PROMPT_COMMAND='RET=$?;'
RET_VALUE='$(echo $RET)' #Ret value not colorized - you can modify it.
RET_SMILEY='$(if [[ $RET = 0 ]]; then echo -ne "\[$GREEN\];)"; else echo -ne "\[$RED\];("; fi;)'

Quindi è possibile utilizzare le variabili $RET_VALUE e $RET_SMILEY nel prompt. Si noti che è necessario usare le virgolette:

#prompt
PS1="$RET_VALUE $RET_SMILEY : "

Questo darà un prompt di base:

0 ;) : true
0 ;) : false
1 ;( : 

Ma probabilmente si desidera utilizzare $RET_VALUE or $RET_SMILEY nel proprio prompt, così:

PS1="\[$WHITE\]$RET_VALUE $RET_SMILEY \[$BLUE\]\u\[$RED\]@\[$EBLUE\]\h\[$WHITE\] \W \[$ERED\]\\$\[$EWHITE\] "

Prompt di Wolfman

Dopo aver letto la maggior parte dei Bash Prompt Howto, l'autore ha sviluppato questo prompt di Bash che 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 file Template:Filename.

  • Aggiungere 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 è tratto dalla sezione Bash Prompt Howto's section on 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 in cui sono definiti un paio di colori. Il colore dell'utente per il nome utente, l'hostname e il prompt ($ o #) è impostato a ciano, mentre se l'utente è root (l'UID di root è sempre 0), imposta il colore a rosso. Il prompt dei comandi è una versione colorata del prompt di default di Arch, con NEW_PWD proveniente 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 per 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, il quale 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

Prompt di KitchM

Questi prompt offrono una maggiore chiarezza visiva e testo lampeggiante. Si noti che l'uso del colore rosso nel prompt dell'utente root potrebbe dare luogo a indicazioni di attenzione.

Innanzi tutto, cambiare lo sfondo di default nelle prefernze del terminale (In questo esempio si usa iul terminal di Xfce) a #D2D2D2, ed il colore del testo a #000000. I font sono impostati come DejaVu Sans Mono Book 12. Il colore del cursore è #00AA00, e il colore dell'attività dei tab è #AF0000.

Poi, in ~/.bashrc and right after the PS1= line, enter a new line with the following:

PS1='\e[1;33;47m\u \e[1;32;47mon \h \e[1;35;47m\d \@\e[0;0m\n\e[1;34m[dir.= \w] \# > \e[0;0m'

And then place a # in front of the first PS1 line to remark it out.

Third, for root user, edit /root/.bashrc in the same manner to include:

PS1='\e[1;31;47m\u \e[1;32;47mon \h \e[1;35;47m\d \@\e[0;0m\n\e[1;31m[dir.= \w] \# > \e[0;0m'

Non dimenticare di commentare la riga vecchia.

These are double-line prompts, e che dovrebbero essere simili a questi:

User-

                                           
Username on myhost Sun Jan 15 12:30 PM     
[dir.= /home/username] 1 >                 
                                           

Root-

                                           
Root on myhost  Sun Jan 15 12:30 PM           
[dir.= /etc/rc.d] 1 >                      
                                           

Si noterà che i colori di sfondo renderanno più confortevole la lettura, ed i colori del testo manterranno le cose "interessanti". There is a lot of leeway to make them personalized, just with the use of colors. Enjoy!

Impostazione titolo finestra

Xterm e molti altri emulatori di terminale (PuTTY incluso) consentono di impostare il titolo della finestra utilizzando speciali sequenze di escape. Si possono impostare le variabili Template:Codeline come segue, poi inserirle all'inizio del prompt per impostare il titolo di xterm (se disponibile) su directory@user@hostname:

#set xterm title
case "$TERM" in
  xterm | xterm-color)
    XTERM_TITLE='\[\e]0;\W@\u@\H\a\]'
  ;;
esac

The text between 0; and \a can be set to anything you like, for example:

export PS1='\[\e]0;Welcome to ArchLinux\a\]\$>> '

sets the window title to "Welcome to ArchLinux" and displays this simple prompt: Template:Cli

Different colors for text entry and console output

If you do not reset the text color at the end of your prompt, both the text you enter and the console text will simply stay in that color. If you want to edit text in a special color but still use the default color for command output, you will need to reset the color after you press enter, but still before any commands get run. You can do this by installing a DEBUG trap in your ~/.bashrc, like this:

trap 'echo -ne "\e[0m"' DEBUG

Esempi di bashrc da Gentoo

# /etc/bash.bashrc
#
# This file is sourced by all *interactive* bash shells on startup,
# including some apparently interactive shells such as scp and rcp
# that can't tolerate any output.  So make sure this doesn't display
# anything or bad things will happen !


# Test for an interactive shell.  There is no need to set anything
# past this point for scp and rcp, and it's important to refrain from
# outputting anything in those cases.

if [[ $- != *i* ]] ; then
	# Shell is non-interactive.  Be done now!
	return
fi

# Bash won't get SIGWINCH if another process is in the foreground.
# Enable checkwinsize so that bash will check the terminal size when
# it regains control.  #65623
# http://cnswww.cns.cwru.edu/~chet/bash/FAQ (E11)
shopt -s checkwinsize

# Enable history appending instead of overwriting.  #139609
shopt -s histappend

# Change the window title of X terminals 
case ${TERM} in
	xterm*|rxvt*|Eterm|aterm|kterm|gnome*|interix)
		PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\007"'
		;;
	screen)
		PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME%%.*}:${PWD/$HOME/~}\033\\"'
		;;
esac

use_color=false

# Set colorful PS1 only on colorful terminals.
# dircolors --print-database uses its own built-in database
# instead of using /etc/DIR_COLORS.  Try to use the external file
# first to take advantage of user additions.  Use internal bash
# globbing instead of external grep binary.
safe_term=${TERM//[^[:alnum:]]/?}   # sanitize TERM
match_lhs=""
[[ -f ~/.dir_colors   ]] && match_lhs="${match_lhs}$(<~/.dir_colors)"
[[ -f /etc/DIR_COLORS ]] && match_lhs="${match_lhs}$(</etc/DIR_COLORS)"
[[ -z ${match_lhs}    ]] \
	&& type -P dircolors >/dev/null \
	&& match_lhs=$(dircolors --print-database)
[[ $'\n'${match_lhs} == *$'\n'"TERM "${safe_term}* ]] && use_color=true

if ${use_color} ; then
	# Enable colors for ls, etc.  Prefer ~/.dir_colors #64489
	if type -P dircolors >/dev/null ; then
		if [[ -f ~/.dir_colors ]] ; then
			eval $(dircolors -b ~/.dir_colors)
		elif [[ -f /etc/DIR_COLORS ]] ; then
			eval $(dircolors -b /etc/DIR_COLORS)
		fi
	fi

	if [[ ${EUID} == 0 ]] ; then
		PS1='\[\033[01;31m\]\h\[\033[01;34m\] \W \$\[\033[00m\] '
	else
		PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] '
	fi

	alias ls='ls --color=auto'
	alias grep='grep --colour=auto'
else
	if [[ ${EUID} == 0 ]] ; then
		# show root@ when we do not have colors
		PS1='\u@\h \W \$ '
	else
		PS1='\u@\h \w \$ '
	fi
fi

# Try to keep environment pollution down, EPA loves us.
unset use_color safe_term match_lhs

Vedere anche

gentoo-bashrc da AUR

Risorse esterne