Cancellare una singola entry nella history della Bash

Avete appena scritto la vostra password supersegreta per accedere a RHN (magari usando rhn-channel…) e non volete cancellare tutta l’history.
Si può fare.
Così:

1. Individuare la/le riga/he che vi interessa rimuovere lanciando il comando history senza opzioni

2. Usare il comando history con l’opzione -d più il numero della riga da cancellare

history -d 340

3. Salvare la modifica appena fatta

history -w

Autojump: per zompare da una cartella all’altra

Autojump è uno di quei giochetti che una volta scoperti diventano essenziali e mancano tantissimo quando si finisce su una macchina che ne è sprovvista. In pratica, una volta installato, potrete anche scordarvi a cosa serve il comando cd.

Installarlo su Ubuntu 18.04 LTS è semplicissimo:

sudo apt-get install autojump

Ci manca ancora un passaggio per poterlo utilizzare in Bash: dobbiamo aggiungere la riga che segue al fondo del file .bashrc presente nella nostra home directory.

. /usr/share/autojump/autojump.sh

Riavviamo la sessione e vediamo se funziona tutto.

Per zompare in una cartella che contiene foo nel nome, a prescindere da dove si trovi e a patto che sia già stata visitata:

j foo

Bash completion per Vagrant

Siccome la prima virtù del buon sistemista deve essere la pigrizia, configuriamo l’autocompletamento per Vagrant in Bash. Per qualche strano motivo, pur essendo incluso nella distribuzione, il file non viene attivato.
Facciamolo noi.

cd /etc/bash_completion.d/
sudo cp /opt/vagrant/embedded/gems/2.2.3/gems/vagrant-2.2.3/contrib/bash/completion.sh .
sudo mv completion.sh vagrant

Riavviamo la sessione e dovrebbe funzionare tutto correttamente.

Redirigere standard output e standard error in /dev/null

Non sempre è necessario tenere traccia di tutto quello che succede durante l’esecuzione di un nostro script. Per annichilire tutti i messaggi di output e di errore la sintassi da utilizzare è questa:
./esempio.sh > /dev/null 2>&1 In pratica diciamo alla shell che vogliamo che lo standard output finisca in /dev/null e che lo standard error (file descriptor 2) finisca proprio là dove finisce lo standard output.

Come cancellare l’history della bash

Se abbiamo la necessità di cancellare completamente l’history, vale a dire lo storico dei comandi che abbiamo impartito attraverso la shell, possiamo utilizzare il builtin history così:

history -c Se siamo un pochino paranoici ma non vogliamo privarci della comodità di avere quantomeno l’history per la sessione corrente, possiamo decidere di cancellare tutto una volta chiusa la shell.
Per cancellare l’history al logout dobbiamo aprire (o eventualente creare) nella nostra directory home il file .bash_logout
vi ~/.bash_logout E aggiungerci esattamente lo stesso comando che abbiamo visto prima history -c

I test più comuni negli script Bash

Ecco una serie di test molto comuni quando si scrivono script di shell.

Il file esiste? [-e]

if [ -e /bin/bash ]; then...

Il file è un link simbolico? [-h o -L]

if [ -h /lib/libz.so.1 ]; then...

La directoty esiste? [-d]

if [ -d /tmp ]; then...

Se ci interessa eseguire più di un test in un unico passaggio, ad esempio potremmo voler sapere se il file è scrivibile [-r] e leggibile [-v] dal nostro utente, dovremo usare un comando simile a questo:

if [ -r /tmp/test -a -w /tmp/test ]; then...

In questo caso con il -a aggiungiamo un’altra verifica.

Per l’elenco completo dei test che si possono effettuare in Bash vi rimando ai sempre ottimi appunti di informatica libera.

Ordinare un elenco di indirizzi ip da riga di comando

Mi è appena capitato di dover ordinare una lista piuttosto lunga di indirizzi ip. Si sa che il sysadmin di suo è fondamentalmente pigro, quindi nessuna voglia di farlo a manina. Dopo aver spulciato le pagine man di sort, ecco il comando che ne è venuto fuori:

sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n lista_di_ip
Una righetta facile facile da ricordare, non trovate? Proviamo a capire un po’ più in dettaglio che cosa fa.

  • Con il -t diciamo che vogliamo usare come separatore dei campi il punto (.)
  • Il -k serve a specificare la chiave di ordinamento, ne specifichiamo più di una in cascata: prima ordiniamo il campo uno fino al primo punto, poi il campo due e via di seguito.
  • -k 1,1n significa appunto dal primo campo (1) al (,) primo campo (1) effettua un ordinamento numerico (n). Lo stesso vale per il resto del comando.