In Bash, la history
command è la chiave non solo per capire cosa hai fatto durante la sessione della shell, ma anche per la materia prima per i nuovi comandi che vuoi eseguire in futuro. History
è particolarmente utile quando si esegue un server senza testa. Se non hai il mouse, non puoi copiare e incollare facilmente l'ultima metà di un comando complesso per eseguirne una versione leggermente modificata, quindi devi digitare tutto da capo, a meno che non usi history
modificatori.
Tieni la cronologia fuori dalla tua cronologia
Prima di parlare di storia, ecco un consiglio per mantenere la history
letterale voci fuori dalla cronologia.
Il problema con l'utilizzo della history
comando per rivedere la tua history
è che aggiunge una voce alla tua history
file. Queste voci non solo ingombrano la tua history
, ma fanno anche regredire ogni riga "più lontano" dalla tua posizione attuale.
$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$ history
102 cd example-project
103 ls
104 touch doc/LICENSE
105 history
$
Un bersaglio mobile è difficile da rintracciare e difficile da colpire, quindi se hai intenzione di usare seriamente la tua history
per velocizzare le tue interazioni con Bash, aggiungi questa configurazione al tuo .bashrc
file:
export HISTCONTROL=$HISTCONTROL:ignorespace
Questa configurazione impedisce che qualsiasi comando preceduto da uno spazio venga aggiunto alla tua history
di Bash .
$ cd example-project
$ ls
bin doc src
$ touch doc/LICENSE
$ history
102 cd example-project
103 ls
104 touch doc/LICENSE
$
[ Corso online gratuito:panoramica tecnica di Red Hat Enterprise Linux. ]
Eventi storici
La struttura di base della history
della shell inizia con un elenco di events
. Un event
è tutto ciò che hai inserito nella shell, seguito da Return
o Enter
chiave. Ogni event
viene assegnato un numero di indice (un numero di riga) e puoi visualizzare e richiamare gli eventi utilizzando event designators
.
Ad esempio, per richiamare un elemento pubblicitario specifico nella history
della shell , usa un punto esclamativo (!
) seguito immediatamente dal numero della history
riga:
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Puoi anche fare riferimento a comandi passati relativi alla loro posizione nella history
elenco. Ad esempio, per eseguire un comando due righe in passato, pensa al tuo prompt attuale come uno maggiore dell'ultima riga in history
, quindi sottrarre il numero della riga che si desidera eseguire dal numero di riga corrente. In questo esempio, riga 103 è la linea di destinazione e 105 è il prompt corrente (per un delta di 105-103=2 ):
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Puoi salvare un intero personaggio se vuoi solo rieseguire l'ultima riga. L'espressione !!
e !-1
sono sinonimi:
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Notare che il comando stesso viene ripetuto nell'output quando history
si ripete. Per brevità e chiarezza, tale output è escluso dai restanti esempi in questo articolo.
Designatori di parole
Bash ha funzioni che ti aiutano ad analizzare la tua history
utilizzando word designators
e strumenti per consentirti di modificare i comandi nella tua history
. Potrebbe essere utile pensare alla history
della tua shell come un array indicizzato o anche come un grande oggetto della cronologia costituito da molti elementi più piccoli. Ogni parola su ogni riga della tua history
è indicizzato, a partire da 0 (che di solito è il comando, ma i comandi in più parti e i prefissi delle variabili di ambiente sono eccezioni degne di nota). Puoi accedere a ciascun indice aggiungendo i due punti (:
) al riferimento di riga, seguito immediatamente dal word designator
.
Ecco un esempio di accesso alla prima parola:
$ history
102 cd example-project
103 ls
104 touch README
$ !103
ls
bin doc README src
Poiché afferrare il primo argomento è comune, il circonflesso (o il "cappello":^
) è un alias per :1
.
$ echo foo
$ !!^
foo
All'altra estremità dello spettro, il dollaro ($
) il segno rappresenta l'argomento finale:
$ echo foo bar baz
$ echo !!$
baz
Intervalli di parole
Non devi accontentarti di un solo argomento. Puoi anche estrarre intervalli di un indice. Tutti gli argomenti tranne lo zero sono disponibili con un asterisco (*
).
$ echo foo bar baz
$ touch !!*
$ ls
foo bar baz
Questo è in realtà un sinonimo di 1-$
(cioè dal primo argomento all'ultimo argomento). Come ci si potrebbe aspettare, è possibile definire arbitrariamente il proprio intervallo utilizzando questa notazione non abbreviata. Questo esempio fa riferimento al secondo al quinto argomento, ignorando il primo e gli ultimi due argomenti:
$ cp foo a.sh spacer.sh rev.bin sync.py baz ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-5
$ ls -l --classify
a.sh* baz foo rev.bin* spacer.sh* sync.py*
Se devi solo escludere la singola parola finale in un indice, puoi fornire un intervallo senza terminazione:
$ cp foo a.sh spacer.sh ~/dest
$ cd ~/dest
$ chmod ug+x !-2:2-
$ ls -l --classify
a.sh* foo spacer.sh*
Utilizzo della cronologia per velocità e precisione
La history
il comando non riguarda sempre la riduzione delle pressioni dei tasti. Puoi usare la tua history
di Bash per evitare l'esclusione accidentale di un file o una cartella da un'operazione importante o di errori di ortografia del nome di un file. Mettiti comodo con la history
comando per interazioni Bash più solide.
[ Vuoi provare Red Hat Enterprise Linux? Scaricalo ora gratuitamente. ]