Alcune opzioni di Bash sono ben note e spesso utilizzate. Ad esempio, molti all'inizio di uno script scrivono
set -o xtrace
per il debug,
set -o errexit
per terminare in caso di errore o
set -o errunset
per terminare se una variabile chiamata non è impostata.
Ma ci sono molte altre opzioni. A volte sono descritte in modo troppo confuso nei manuali, quindi ho raccolto qui alcune delle più utili, con spiegazioni.
Nota: su Mac potrebbe esserci una versione di bash più vecchia (3.x invece di 4.x), dove non tutte queste opzioni sono disponibili. In questo caso, consultate o .
set o shopt?
Ci sono due modi per impostare i parametri di bash: dallo script o dalla riga di comando. Si possono usare i comandi incorporati set e shopt. Entrambi modificano il comportamento della shell, fanno sostanzialmente la stessa cosa (con argomenti diversi) e si differenziano per il loro . I parametri set sovrascrivono o sono presi in prestito dai parametri di altre shell, mentre i parametri shopt sono creati in bash.
Se vuoi vedere le opzioni correnti, esegui:
$ set -o
$ shopt Per attivare un'opzione in set si usa la sintassi lunga o breve:
$ set -o errunset
$ set -eL'effetto è lo stesso.
Per disattivare un'opzione, è necessario mettere un più al posto di un meno:
$ set +eA lungo ho avuto difficoltà a ricordare questa sintassi, poiché la logica sembra errata (il meno include l'opzione, mentre il più la disabilita).
In shopt per attivare e disattivare le opzioni si usano flag (più logici) -s (set) e -u (unset):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= offCambiamento delle 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 erroneamente.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd .. Ho usato questa opzione per molti anni e molto raramente (forse una volta all'anno) prendo una decisione molto strana. Ma nei restanti giorni cdspell risparmia tempo, letteralmente ogni giorno.
2. autocd
Se non sei disposto a tollerare l'inefficienza del ripetuto input cd, puoi attivare questa opzione per passare alla cartella X, se il comando X non esiste.
$ shopt -s autocd
$ abcdefg
$ cd ..In combinazione con il completamento automatico permette 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
È un'ottima opzione che espande le variabili d'ambiente 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/folderUscita pulita
4. checkjobs
Questo parametro interrompe l'uscita dalla sessione se ci sono lavori in esecuzione in background.
Invece di uscire, verrà visualizzato un elenco di lavori non completati. Se vuoi comunque uscire, digita di nuovo exit.
$ shopt -s checkjobs
$ echo $$
68125 # <= ID processo per la shell
$ sleep 999 &
$ exit
Ci sono lavori in esecuzione.
[1]+ Esecuzione sleep 999 &
$ echo $$
68125 # <= ID processo per la shell è lo stesso
$ exit
Ci sono lavori in esecuzione.
[1]+ Esecuzione sleep 999 &
$ exit
$ echo $$
$ 59316 # <= questa volta l'ID processo è cambiatoSuperpoteri di sostituzione
5. globstar
Questa opzione ti dà superpoteri di sostituzione! Se inserisci:
$ shopt -s globstar
$ ls **la shell mostrerà ricorsivamente tutte le directory e sottodirectory.
In combinazione con direxpand puoi navigare rapidamente tutto ciò che si trova sotto nella gerarchia:
$ shopt -s direxpand
$ ls **[TAB][TAB]
Visualizza tutte le 2033 possibilità? (y o n) 6. extglob
Questa opzione attiva funzionalità che vengono spesso associate alle 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*)
cfileQui i modelli vengono collocati tra parentesi e separati da una barra verticale. Ecco gli operatori disponibili:
? = соответствует нулю или одному вхождению заданных шаблонов ! = показать всё, что не соответствует заданным шаблонам * = ноль или более вхождений + = одно или более вхождений @ = ровно одно вхождение
Protezione da incidenti
7. histverify
All'inizio potrebbe essere un po' intimidatorio utilizzare il comando di avvio rapido dalla cronologia con abbreviazioni !! e !$.
Opzione histverify permette di vedere 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 viene eseguito 8. Noclobber
Di nuovo, per la protezione da incidenti, in particolare per evitare di sovrascrivere un file già esistente con l'operatore di reindirizzamento (>). Questo può essere disastroso se non si ha un backup.
Opzione set -C impedisce tale sovrascrittura. In caso di necessità, si può bypassare la protezione con l'operatore >|:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: impossibile sovrascrivere il file esistente
$ echo something >| afile
$Fonte: habr.com
