Le principali opzioni per comporre la stringa sono le seguenti:
-`\d` visualizza la data formato "Giorno-della-settimana Mese Data" ("Tue May 26");
-`\H` visualizza il nome dell'host;
-`\t` visualizza l'ora nel formato a 24 ore ( HH:MM:SS);
-`\A` visualizza l'ora nel formato a 24 ore ( HH:MM );
-`\u` visualizza il nome dell'utente corrente;
-`\w` visualizza il nome della directory corrente o la tilde nel caso della directory $HOME;
-`\$` visualizza il simbolo $ per gli utenti normali o # per l'utente root;
-`\\` visualizza un singolo backslash;
-`\n` il carattere "newline";
-`\r` il carattere "carriage return";
-`\s` il nome della shell, il nome base di $0;
-`\!` il numero cronologico (history number) di questo comando;
-`\[` 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.
Si possono anche utilizzare colori, icone e altri elementi grafici utilizzando codici di colore ANSI e icone speciali. Il formato è
`\[\033[CODICE;COLOREm\]`
## Modificare la variabile $PS1
Per modificare la variabile PS1 si può usare il comando
`export PS1="nuova stringa di prompt"`
ad esempio
`export PS1="\u@\h:\w$ "`
visualizzerà il nome dell'utente, il nome del host e la directory corrente.
### Salvare le modifiche
Per rendere permanenti le modifiche alla variabile PS1 si può aggiungere il comando export alla fine del file `.bashrc` presente nella home dell'utente.
Riavviare il terminale o eseguire il comando `source ~/.bashrc` per rendere effettive le modifiche.
La funzione `parse_git_branch` è una funzione personalizzata che consente di visualizzare il nome della branch corrente del repository git sulla riga di comando.
In particolare:
-`git branch 2> /dev/null`: esegue il comando git branch e reindirizza l'output di errore in `/dev/null`, in modo che non venga visualizzato alcun messaggio di errore se non si è in un repository git;
-`sed -e '/^[^*]/d'`: utilizza sed per eliminare tutte le righe che non iniziano con un asterisco;
-`-e 's/* \(.*\)/\1/'`: utilizza sed per sostituire la riga restante con solo il contenuto dopo l'asterisco (che è il nome della branch corrente).
La funzione utilizzando questi comandi, restituirà solo il nome della branch corrente del repository git.
```bash
[23:05 lun gen 16]davide@laptop (2000):~/Documenti/Appunti.wiki
master >
```
## Come avere una lunghezza indefinita della history
```bash
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=-1
HISTFILESIZE=-1
```
Basta impostare a `-1` questi valori nel file `.bashrc`.
## Ricerca nella history
Per ricercare aventi e indietro nella cronologia dei comandi, mentre questi vengono digitati, tramite i tasti PAGUP e PAGDOWN, aggiungere il seguente testo nel file `~/.inputrc`:
```bash
"\e[5~": history-search-backward
"\e[6~": history-search-forward
```
I tasti `\e[5` e `\e[6` sono proprio PAGUP e PAGDOWN.
In ogni caso, la pressione dei tasti CTRL+R permette di effettuare la ricerca ricorsiva dei comandi precedentemente digitati.
### Hstr
`hstr` è un comando che aiuta a navigare in maniera più efficace nella history. Per installarlo basta digitare questo semplice comando:
```bash
sudo apt install hstr
```
Ora, con la combinazione `CTRL+r` si accederà alla ricerca dei comandi.
Hstr può essere configurato per fornire suggerimenti di ricerca durante la digitazione, simile ai suggerimenti che vengono visualizzati in genere in un browser Web e in altre applicazioni.
Suggerisce i comandi utilizzati più spesso e li mantiene in cima alla lista. È inoltre possibile aggiungere manualmente i comandi ai preferiti per un accesso facile e veloce.
Aggiungere il testo seguente al file `.bashrc` per la configurazione:
```bash
# HSTR configuration - add this to ~/.bashrc
alias hh=hstr # hh to be alias for hstr
export HSTR_CONFIG=monochromatic # get more colors
shopt -s histappend # append new history items to .bash_history
export HISTCONTROL=ignorespace # leading space hides commands from history
export PROMPT_COMMAND="history -a; history -n; ${PROMPT_COMMAND}"
# if this is interactive shell, then bind hstr to Ctrl-r (for Vi mode check doc)
if [[ $- =~ .*i.* ]]; then bind '"\C-r": "\C-a hstr -- \C-j"'; fi
# if this is interactive shell, then bind 'kill last command' to Ctrl-x k
if [[ $- =~ .*i.* ]]; then bind '"\C-xk": "\C-a hstr -k \C-j"'; fi