Readline (Italiano)
Readline è una libreria del progetto GNU usata da Bash e da altre interfacce per la linea di comando per modificare ed interagire con la linea di comando. Prima di leggere questo articolo fare riferimento alla home page del progetto dato che in questo articolo saranno introdotte solo semplici configurazioni.
Editing della linea di comando
Come default Readline usa le combinazioni da tastiera di Emacs, per interagire con la linea di comando. Comunque, è supportata anche la modalità vi. Nel caso siate utenti vi, probabilmente vorrete inserire la seguente linea nel proprio ~/.inputrc
per abilitare le scorciatoie di vi:
set -o vi
Esistono a questo scopo le pagine dei trucchi di vi o emacs.
Cronologia
Solitamente, premendo la freccia che punta in alto, verrà mostrato l'ultimo comando eseguito anche se sono stati digitati alcuni caratteri. Comunque, gli utenti potrebbero trovare più pratico elencare i comandi digitati che hanno una corrispondenza con quanto digitato.
Ad esempio, se l'utente ha digitato i seguenti comandi:
ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig
who
mount
man mount
In questa situazione, se digitiamo ls
e successivamente premiamo la freccia su, l'attuale input sarà sostituito con man mount
, cioè l'ultimo comando eseguito. Avendo la ricerca nella cronologia abilitata, verranno mostrati invece solo i comandi eseguiti che cominciano con ls
(l'attuale input), in questo caso ls /usr/src/linux-2.6.15-ARCH/kernel/power/Kconfig
.
Sarà possibile abilitare questa modalità aggiungendo le seguenti linee al file /etc/inputrc
orppure al file ~/.inputrc
:
"\e[A":history-search-backward "\e[B":history-search-forward
Se si usa la modalità "vi" è possibile aggiungere queste righe a ~/.inputrc
(come indicato in questo posto):
set editing-mode vi $if mode=vi set keymap vi-command # these are for vi-command mode "\e[A": history-search-backward "\e[B": history-search-forward set keymap vi-insert # these are for vi-insert mode "\e[A": history-search-backward "\e[B": history-search-forward $endif
Se si sceglie di inserire le righe sopra al file ~/.inputrc
, è consigliato aggiungere anche la seguente linea all'inizio del file per evitare strani comportamenti come questo:
$include /etc/inputrc
In alternativa, si può utilizzare la reverse-search-history (ricerca incrementale) premendo Ctrl
+R
, che non effettua una ricerca basata sull'input ma sposta il buffer di ricerca mentre i tasti vengono digitati ed utilizzandoli come termini di ricerca. Premendo nuovamente Ctrl
+R
durante questa modalità verrà mostrata la linea precedente nel buffer che corrisponde all'attuale termine di ricerca, mentre premendo Ctrl
+G
(abort) verrà annullata la ricerca e riproposto l'input corrente. Quindi per ricercare tra i precedenti comandi mount
, sarà necessario premere Ctrl
+R
, digitare 'mount' e continuare a premere Ctrl
+R
finchè non si raggiunge la linea desiderata.
L'equivalente ricerca ma in avanti chiamata forward-search-history è legata alla combinazione Ctrl
+S
di default. Attenzione perché molti terminali sovrappongono la combinazione Ctrl
+S
per sospendere l'esecuzione fino a che non viene premuta la combinazione Ctrl
+Q
. (Questo viene chiamato XON/XOFF flow control). Per attivare la forward-search-history, e quindi disabilitare il flow control eseguire il comando:
$ stty -ixon
oppure utilizzare un'altra combinazione di tasti nel file inputrc
. Ad esempio se si vuole utilizzare Alt
+S
che solitamente per default non è legato a nessun evento :
"\es":forward-search-history
Ricerca nella cronologia
Evitare i duplicati
Se si ripetono spesso diversi comandi, essi verranno aggiunti ogni volta alla propria cronologia. Per evitarlo, aggiungere questo al proprio ~/.bashrc
:
export HISTCONTROL=ignoredups
Evitare gli spazi
Per impedire che vengano considerati nella cronologia i comandi vuoti aggiungere questa linea al file ~/.bashrc
:
export HISTCONTROL=ignorespace
Se nel file è già presente
export HISTCONTROL=ignoredups
Sostituirlo con
export HISTCONTROL=ignoreboth
Macro
Readline supporta anche l'assegnazione di combinazioni di tasti a delle macro. Per esempio, eseguire questo comando in Bash:
bind '"\ew":"\C-e # macro"'
o aggiungere la parte contenuta tra apici al file ~/.inputrc
:
"\ew":"\C-e # macro"
Adesso scriviamo una linea e premiamo Alt
+W
. Readline si comporterà come se avessimo premuto Ctrl
+E
(spostamento a fine riga) ed aggiungerà ' # macro
'.
Usare ogni possibile combinazione di tasti per una macro tramite readline, può essere molto utile per automatizzare le opreazioni effettuate spesso. Ad esempio questa macro fa si che la combinazione Ctrl
+Alt
+L
aggiunga "| less" alla linea e la esegua (Ctrl
+M
equivale a Enter
):
"\e\C-l":"\C-e | less\C-m"
Il comando successivo inserisce ad inizio riga la stringa 'yes |' quando viene premuta la combinazione Ctrl
+Alt
+Y
, utile per confermare ogni domanda di tipo yes/no dal terminale:
"\e\C-y":"\C-ayes | \C-m"
Questo esempio incapsula la linea digitata all'interno di su -c ''
, se viene premuta la combinazione Alt
+S
:
"\es":"\C-a su -c '\C-e'\C-m"
Come ultimo esempio, per avviare facilmente un comando in background con Ctrl
+Alt
+B
, redirigendo ogni tipo di output:
"\e\C-b":"\C-e > /dev/null 2>&1 &\C-m"
Tips and tricks
Disabilitare la visualizzazione delle combinazioni control
A causa di un aggiornamento di readline, il terminale ora visualizza ^C
dopo aver premuto Ctrl
+C
. Per gli utenti che vogliono disabilitare questa visualizzazione, basterà semplicemente aggiungere la seguente linea al file ~/.inputrc
:
set echo-control-characters off