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 o .
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 . 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 -eL'effetto è lo stesso.
Per disattivare un'opzione, è necessario mettere un più invece di un meno:
$ set +eA 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 # <= offCambiamento 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\/folderUscita 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 è cambiatoSuperpoteri 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*)
cfileQui 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
