Come tutti gli utenti Linux e Mac (e magari anche windows con WSL (1)) non passa giorno in cui non spenda del tempo con un terminale.
Ci si sforza sempre di automatizzare i processi di sviluppo ma velocizzare anche quello che c’è a contorno non è una cattiva idea.
Ecco perché Alex Mufatti ci fornisce un elenco di consigli tra comandi e shortcut per Bash (2) che possono velocizzare il vostro lavoro (per una lista completa, vi rimandiamo al manuale di riferimento (3)).
Event designators
Gli event designators sono riferimenti a comandi appartenenti alla history, ovvero la storia dei comandi digitati nel terminale.
!-n
!-n
è il riferimento all’n-esimo comando nella history partendo dall’ultimo. Quindi !-1
sarà l’ultimo comando !-2
il penultimo e così via.
$ cd tmp $ echo "ciao" ciao $ mkdir pippo $ !-2 $ echo "ciao" ciao
!!
Una shortcut della shortcut è !!
che rappresenta l’ultimo comando della history.
Uno degli usi più interessante per questa shortcut è:
$ mkdir /pippo mkdir: cannot create directory ‘/pippo’: Permission denied $ sudo !! $ sudo mkdir /pippo
^string1^string2
^string1^string2
serve a ripetere il comando precedente sostituendo string2 a string1.
$ cd /cartella/con/un/path/sbagliato/esageratamente/lungo cd: no such file or directory: /cartella/con/un/path/sbagliato/esageratamente/lungo $ ^sbagliato^giusto $ cd /cartella/con/un/path/giusto/esageratamente/lungo $
Word designator
In associazione con gli event designator si possono utilizzare dei word designator per selezionare solo parte del comando precedente. Per farlo si utilizza la forma <event designator>:<word designator>
.
Esistono vari tipi di word designator; il più semplice è quello che prende l’ennesimo argomento del comando:
$ cat file1.txt file2.txt file3.txt $ cat !!:2 $ cat file2.txt
Alcune shortcut dei word designator sono !^
che seleziona il primo argomento del comando precedente e !$
che seleziona l’ultimo argomento del comando precedente.
Tilde
Tutti conosciamo il significato di ~
, ovvero tilde. Però non tutti sanno che ci sono altre espansioni gestite dal carattere tilde.
Le più utili sono:
~username
: la cartella home dello user username;~+
: la cartella corrente (equivalente a $PWD);~-
: il path dell’ultima cartella visitata.
Spazio
Un altro trucco di Bash è quello di far precedere un comando da uno spazio. In questo modo il comando non sarà salvato nella history della shell.
Questo risulta utile quando si devono immettere delle password come parametro di un comando:
$ cd tmp $ comando_che_richiede_la_mia_password -p 1234 $ history -1 1111 cd tmp
Brace expansion
Con il comando brace expansion è possibile generare stringhe multiple data un stringa in una forma specifica. Le brace expansion possono essere precedute da un prefisso e un suffisso.
$ cat file_{a,b,c}.txt cat: file_a.txt: No such file or directory cat: file_b.txt: No such file or directory cat: file_c.txt: No such file or directory
È possibile espandere anche sequenze di numeri nella forma {numero_iniziale..numero_finale..intervallo}
e concatenare diverse espansioni:
$ cat file_{a,b,c}_{1..10..2}.txt cat: file_a_1.txt: No such file or directory cat: file_a_3.txt: No such file or directory cat: file_a_5.txt: No such file or directory cat: file_a_7.txt: No such file or directory cat: file_a_9.txt: No such file or directory cat: file_b_1.txt: No such file or directory cat: file_b_3.txt: No such file or directory cat: file_b_5.txt: No such file or directory cat: file_b_7.txt: No such file or directory cat: file_b_9.txt: No such file or directory
Attenzione agli spazi però: espansioni separate da spazi sono indipendenti fra loro.
$ echo foo{bar,baz} {1,2}{0,5} foobar foobaz 10 15 20 25
Parameter expansion
Parlando di parameter expansion si apre un mondo di possibilità. Ne citerò solo alcune, quelli che reputo più utili.
${parametro:offset:lun}
Ritorna la porzione di lunghezza lun a partire dal carattere offset della stringa in parametro:
$ parameter=ciao_come_va $ echo ${parameter:2:2} ao $ echo ${parameter:2:-3} ao_come
${parametro:offset}
Ritorna la porzione stringa in parametro a partire dal carattere offset fino al termine della stringa:
$ parameter=ciao_come_va $ echo ${parameter:2} ao_come_va
${parametro%match}
Ritorna la porzione stringa in parametro a meno della parte che soddisfa il pattern match :
$ parameter=ciao_come_va $ echo ${parameter%come_va} ciao_
${parameter^}, ${parameter^^}, ${parameter^^match}
Ritorna la porzione stringa in parametro con rispettivamente la prima lettera maiuscola, tutto in maiuscolo o le lettere che soddisfano match in maiuscolo.
$ parameter=ciao_come_va $ echo ${parameter^} Ciao_come_va $ echo ${parameter^^} CIAO_COME_VA $echo ${parameter^^[cao]} CiAO_COme_vA