GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzo di modificatori di parole con la cronologia di Bash in Linux

Nel mio articolo, Analisi della cronologia di Bash, ho dimostrato come fare riferimento agli elementi nella history della shell per numero di riga e per posizione della parola. Dopo aver imparato l'analisi della history di Bash per riga e indice di parola, puoi beneficiare dei modificatori disponibili per la history comando.

L'opzione della shell istexspan

Prima di discutere della history analisi, vale la pena ricordare che il punto esclamativo (! ) la notazione è disponibile solo per la tua shell Bash grazie a histexpand opzione. Perché histexpand è abilitato per impostazione predefinita, molti utenti non ci tengono mai molto in considerazione. Tuttavia, è l'opzione che impone l'espansione di un ! all'elenco della history voci.

Se l'opzione è disattivata, perdi questa funzionalità. Ad esempio:

$ echo foo
$ set +o histexpand
$ !-2
bash: !-2: command not found
$ set -o histexpand
$ !-3
echo foo
foo

In genere, histexpand è attivo per impostazione predefinita, tranne che nelle shell non interattive (ad esempio, in uno script di shell). Dovrebbe history la stenografia non ti delude mai, puoi attivare histexpand come opzione della shell oppure usa la history completa comando implicito da histexpand :

$ echo foo
$ set +o histexpand
$ history -p !-2
echo foo
foo

In uno script di shell, devi attivare history e fornisci una posizione in cui history può essere salvato:

HISTFILE=/tmp/history.log
set -o histexpand
set -e

## some code here

## clean up
rm /tmp/history.log

Un vantaggio di lasciare histexpand disattivato è che perdi la verbosità dei risultati di history Azioni. Ad esempio, con histexpand attivato, la prima cosa è tornata alla tua shell dopo una history command è la versione estesa di ciò che viene eseguito:

$ set -o histexpand
$ echo foo
foo
$ !!
echo foo
foo

Con histexpand disattivato, la tua history il comando è più lungo, ma i risultati sono più concisi:

$ set +o histexpand
$ echo foo
foo
$ !!
foo

Se trovi un uso per history in uno script di shell dipende da te, ma history i modificatori hanno alcune scorciatoie interessanti che li rendono particolarmente convenienti in alcuni casi.

Modificatori della cronologia

Modificatori alla history le selezioni sono contrassegnate da due punti (: ) seguito da un carattere modificatore. Alcuni modificatori possono essere combinati con altri.

Suffisso del nome file

Per eliminare il suffisso di un argomento, usa r modificatore.
È simile a basename .

$ ls -lgGh aLongFileNameWith-a_complex-syntax-1.tgz
-rw-r--r-- 1 0 Mar  9 11:23 aFileNameWith-a_complex-syntax-1.rev.tgz

$ echo !!:2:r
echo aLongFileNameWith-a_complex-syntax-1
aLongFileNameWith-a_complex-syntax-1

Il r modificatore non è super intelligente. Trova semplicemente il punto finale in un nome di file e taglia il suffisso, che a volte potrebbe non corrispondere a quello che pensi come il suffisso del file, quindi in qualche modo, basename offre una maggiore flessibilità.

$ set +o histexpand
$ ls -lgGh aLongFileNameWith-a_complex-syntax-1.tar.gz
$ echo !!:2:r
aLongFileNameWith-a_complex-syntax-1.tar

Il risultato opposto può essere ottenuto con il e modificatore:

$ set +o histexpand
$ echo aLongFileNameWith-a_complex-syntax-1.tgz
aLongFileNameWith-a_complex-syntax-1.tgz
$ echo !!:2:e
.tgz

Nomi di file

Una versione semplice di dirname è disponibile con il h modificatore:

$ set +o histexpand
$ echo src/spacer.sh
src/spacer.sh
$ echo !!^:h
src

E l'altro lato di quell'espressione è disponibile con t modificatore:

$ set +o histexpand
$ echo src/spacer.sh
src/spacer.sh
$ echo !!^:t
spacer.sh

Sostituzione di stringhe

Forse il modificatore più ampiamente utile di history è la sostituzione di stringhe. Ad esempio, qualsiasi amministratore di un ambiente misto ha digitato questo in un box di Red Hat Enterprise Linux a un certo punto:

$ sudo apt install tmux

Un tale errore è facile da correggere con la sostituzione di stringhe:

$ ^apt^dnf
sudo dnf install tmux

Puoi anche aggiungere alcune opzioni:

$ ^apt^dnf -y
sudo dnf -y install tmux

Questa history la sintassi è un'abbreviazione per s modificatore. La sintassi completa è, ad esempio, !!:s/apt/dnf e quindi può essere utile per elementi di diverse righe nella tua history . Supponiamo che tu abbia emesso un comando utile tre comandi indietro e desideri eseguire un comando simile ora:

$ !-3:s/vi/emacs/
sudo dnf install -y emacs

Come sed , questa sostituzione di default avviene una sola volta, ma puoi renderla globale (in relazione alla riga che stai richiamando) con il g modificatore:

$ pip update pip
[...]
$ !!:gs:/pip/pip3/
pip3 update pip3

La sicurezza prima di tutto:come eseguire una corsa a secco cronologica

Premendo Return dopo una history modificata line a volte può essere stressante, specialmente quando la riga che si desidera rieseguire è annidata tra comandi particolarmente pericolosi o interessa file importanti. Se vuoi verificare il comando che stai per modificare ed eseguire, puoi utilizzare il p modificatore alla fine di una history modifica.

$ !-32:0-:s/mv/trash/:p
trash important.txt status.txt pay.txt

Il comando che vedi come risultato è l'elemento espanso da history , ma non è stato ancora eseguito. Puoi eseguirlo manualmente, premendo il tasto Up freccia o Ctrl+P , ora che è stato risolto per te. Utilizzo della verifica (p ) è generalmente una buona idea se non conosci l'uso della history comando in produzione.

Conclusione

La cronologia di Bash può essere utile per molte cose, che si tratti di guardare indietro a ciò che hai fatto tutto il giorno o semplicemente di rendere il tuo lavoro più efficiente riutilizzando frammenti di informazioni che hai già lavorato per capire. Più ti eserciti con i modificatori di cronologia, più utili diventano. Consenti a te stesso di inciampare (con attenzione) in alcuni mentre impari la sintassi e presto richiamerai comandi e argomenti con meno pressioni di tasti che mai.

[ Vuoi provare Red Hat Enterprise Linux? Scaricalo ora gratuitamente. ]


Linux
  1. Come cancellare la cronologia della riga di comando BASH in Linux

  2. Come cancellare la cronologia di Bash su Linux

  3. Usare l'a capo automatico con Mc?

  4. Utilizzo del comando Linux Basename negli script Bash

  5. Esempio di utilizzo di named pipe in Linux Bash

Comando della cronologia in Linux con esempi

Come abilitare il timestamp nella cronologia di Bash in Linux

Comando Bash Echo spiegato con esempi in Linux

Pianifica i lavori in Linux con il comando 'at'

Utilizzo del comando Linux Dirname negli script Bash

Come cancellare la cronologia di Bash in Linux e Mac