2011-06-23

Correzione comando precedente in bash

Nel post precedente Esecuzione del comando precedente con sudo in bash ho esposto un tipo di utilizzo della history delle shell con particolari riferimenti a bash, la tecnica esposta utilizza la scorciatoia !! che corrisponde al comando precedente.

Questa volta il comando precedente andrà modificato per essere eseguito con qualche correzione, il caso più frequente che mi si presenta è quello in cui devo verificare il contenuto di un tarball ( un archivio in formato tar di solito compresso con gzip o bzip2 ) e poi estrarne il contenuto.
Di solito per controllare il contenuto di un tarball e per questo utilizzo il comando:
tar tzf nome_pacchetto.tgz
 con questo ottengo la semplice lista dei nomi di file contenuti nell'archivio. Solitamente lo utilizzo per virificare che nell'archivio tutto sia contenuto in una directory per evitare che troppe directory o file vengano sparsi nella mia directory corrente. Se il contenuto del pacchetto mi soddisfa devo estrarne il contenuto e lo faccio con il comando:
tar xzf nome_pacchetto.tgz
Come al solito di modi per evitare di riscrivere tutta la riga ce ne sono molti, dall'utilizzo delle frecce di direzione a quello che ritengo il migliore:
^ t^ x
 Per essere certi che la visualizzazione non giochi scherzi imprevisti chiarisco che si tratta di sei caratteri:
  1. accento circonflesso ^
  2. uno spazio
  3. la lettera t
  4. accento circonflesso ^
  5. uno spazio
  6. la lettera x
Il significato del comando riassunto in poche parole è "ripeti il comando precedente sostituendo la t e lo spazio che la precede con una x preceduta da uno spazio".
La forma completa del comando sarebbe:
!-1:s/ t/ x/
 ma devo riconoscere che oltre ad essere più lunga da scrivere è anche molto più difficile da ricordare; questa forma può essere utile se dopo il primo comando è stato eseguito qualche altro comando, come ad esempio se il tarbal non contiene una directory principale e si ha bisogno di crearne una e farla diventare quella corrente con:
mkdir nuova_dir
 cd !$
Allora la ripetizione del comando che ci interessa non va riferita al comando precedente ma al terzultimo comando per cui:
!-3:s/ t/ x/
 Questa tecnica di correzione di uno dei comandi precedenti può essere utilizzata anche nei casi di errata digitazione ma nella maggior parte di quei casi la correzione tornando indietro con le frecce direzionali la trovo più chiara e immediata.

Nessun commento:

Posta un commento