Otto opzioni Bash poco conosciute

Alcune opzioni di Bash sono ben note e frequentemente utilizzate. Ad esempio, molte persone all'inizio di uno script scrivono

set -o xtrace

per il debug,

set -o errexit

per uscire in caso di errore o

set -o errunset

per uscire se una variabile chiamata non è impostata.

Ma ci sono molte altre opzioni. A volte sono descritte in modo confuso nei manuali, quindi ho raccolto qui alcune delle più utili, con spiegazioni.

Nota: su Mac potrebbe essere installata una versione più vecchia di bash (3.x, e non 4.x), dove non tutte queste opzioni sono disponibili. In tal caso, vedere qui o qui.

set o shopt?

Ci sono due modi per impostare i parametri di bash: da uno script o dalla riga di comando. È possibile utilizzare i comandi integrati set e shopt. Entrambi modificano il comportamento della shell, facendo fondamentalmente la stessa cosa (con argomenti diversi), e si differenziano per il loro origine. I parametri set sono ereditati o presi a prestito da parametri di altre shell, mentre i parametri shopt sono creati in bash.

Se vuoi vedere le opzioni attuali, esegui:

$ set -o
$ shopt

Per attivare un'opzione in set si utilizza la sintassi lunga o corta:

$ set -o errunset
$ set -e

L'effetto è lo stesso.

Per disattivare un'opzione, è necessario mettere un più invece di un meno:

$ set +e

A lungo tempo non riuscivo a memorare questa sintassi, poiché la logica sembra sbagliata (il meno attiva l'opzione e il più la disattiva).

In shopt per attivare e disattivare le opzioni si utilizzano (più logici) flag -s (set) e -u (unset):

$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off

Cambiamento di directory

Ci sono diverse opzioni che aiutano a lavorare con le directory.

1. cdspell

Con questa impostazione bash inizierà a comprendere gli errori di battitura e ti porterà nella cartella il cui nome hai digitato incorrettamente.

$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..

Ho usato questa opzione per molti anni, e molto raramente (forse una volta all'anno) prende decisioni molto strane. Ma nei restanti giorni cdspell risparmia tempo, letteralmente ogni giorno.

2. autocd

Se non sei disposto a sopportare l'inefficienza di dover digitare più volte cd, allora puoi attivare questa opzione per spostarti nella cartella X se il comando X non esiste.

$ shopt -s autocd
$ abcdefg
$ cd ..

In combinazione con il completamento automatico, questo consente di saltare rapidamente tra le cartelle:

$ .\/abc[TAB][RETURN]
cd -- .\/abcdefg

Solo non chiamare la cartella rm -rf * (sì, tra l'altro, è possibile).

3. direxpand

Questa è un'opzione interessante che espande le variabili ambientali premendo Tab:

$ shopt -s direxpand
$ .\/[TAB]     # sostituito con...
$ \/full\/path\/to\/current_working_folder
$ ~\/[TAB]     # sostituito con...
$ \/full\/path\/to\/home\/folder
$ $HOME\/[TAB] #  sostituito con...
$ \/full\/path\/to\/home\/folder

Uscita pulita

4. checkjobs

Questo parametro interrompe l'uscita dalla sessione se ci sono ancora lavori in esecuzione in background.

Invece dell'uscita, verrà visualizzato un elenco di lavori in sospeso. Se desideri comunque uscire, inserisci di nuovo exit.

$ shopt -s checkjobs
$ echo $$
68125             # <= ID del processo per la shell
$ sleep 999 &
$ exit
Ci sono lavori in esecuzione.
[1]+  In esecuzione                 sleep 999 &
$ echo $$
68125             # <= ID del processo per la shell lo stesso
$ exit
Ci sono lavori in esecuzione.
[1]+  In esecuzione                 sleep 999 &
$ exit
$ echo $$
$ 59316           # <= stavolta l'ID del processo è cambiato

Superpoteri di sostituzione

5. globstar

Questa opzione ti offre superpoteri di sostituzione! Se inserisci:

$ shopt -s globstar
$ ls **

la shell mostrerà ricorsivamente tutte le directory e le sottodirectory.

In combinazione con direxpand puoi visualizzare rapidamente tutto ciò che si trova più in basso nella gerarchia:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Visualizzare tutte le 2033 possibilità? (y o n) 

6. extglob

Questa opzione attiva funzioni che sono più comunemente associate a espressioni regolari. A volte è molto utile:

$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile

Qui i modelli vengono racchiusi tra parentesi e separati da una barra verticale. Ecco gli operatori disponibili:

? = соответствует нулю или одному вхождению заданных шаблонов
! = показать всё, что не соответствует заданным шаблонам
* = ноль или более вхождений
+ = одно или более вхождений
@ = ровно одно вхождение

Protezione dagli incidenti

7. histverify

All'inizio potrebbe essere un po' spaventoso utilizzare il completamento rapido dei comandi dalla cronologia con le abbreviazioni !! e !$.

Opzione histverify permette di visualizzare prima come Bash interpreta il comando, prima che venga effettivamente eseguito:

$ shopt -s histverify
$ echo !$          # <= Premendo Invio il comando non viene eseguito
$ echo histverify  # <= Viene prima mostrato sullo schermo,
histverify         # <= e poi eseguito 

8. Noclobber

Ancora una volta, per proteggerti dagli incidenti, ovvero dalla sovrascrittura di un file che esiste già con un operatore di redirezione (>). Questo può diventare un disastro se non hai un backup.

Opzione set -C impedisce tale sovrascrittura. Se necessario, puoi aggirare la protezione con l'operatore >>|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: impossibile sovrascrivere file esistente
$ echo something >| afile
$

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS - ProHoster