Alcune opzioni di Bash sono ben note e spesso utilizzate. Ad esempio, molte persone scrivono all'inizio della sceneggiatura
impostare -o xtrace
per il debug,
imposta -o errexit
uscire per errore o
set -o erroreset
per uscire se la variabile chiamata non è impostata.
Ma ci sono molte altre opzioni. A volte vengono descritti in manas in modo troppo confuso, quindi ho raccolto qui alcuni dei più utili, con relative spiegazioni.
Nota: i Mac potrebbero avere una versione precedente di bash (3.x anziché 4.x) in cui non tutte queste opzioni sono disponibili. In questo caso, vedi
set
o shopt
?
Esistono due modi per impostare le opzioni di bash: da uno script o dalla riga di comando. Puoi usare i comandi integrati set
и shopt
. Entrambi cambiano il comportamento della shell, fanno più o meno la stessa cosa (con argomenti diversi), ma differiscono nel loro set
vengono ereditati o presi in prestito da parametri di altre shell, mentre i parametri shopt
creato in bash.
Se vuoi vedere le opzioni correnti, esegui:
$ set -o
$ shopt
Per attivare l'opzione in set
Viene utilizzata la sintassi lunga o breve:
$ set -o errunset
$ set -e
L'effetto è lo stesso.
Per disabilitare l'opzione, devi inserire un segno più anziché un segno meno:
$ set +e
Per molto tempo non sono riuscito a ricordare questa sintassi perché la logica sembrava sbagliata (un segno meno abilita l'opzione e un segno più la disabilita).
В shopt
i flag (più logici) vengono utilizzati per abilitare e disabilitare le opzioni -s
(impostato) e -u
(non settato):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= off
Cambiare directory
Esistono diverse opzioni che ti aiutano a lavorare con le directory.
1.cdspell
Con questa impostazione, bash inizierà a riconoscere gli errori di battitura e ti porterà alla cartella di cui hai scritto male il nome.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd ..
Utilizzo questa opzione da molti anni e molto raramente (forse una volta all'anno) prende una decisione molto strana. Ma negli altri giorni cdspell
fa risparmiare tempo, letteralmente ogni giorno.
2. CD automatico
Se non sei disposto ad accettare l'inefficienza di più voci cd
, quindi puoi impostare 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 ti consente di passare rapidamente da una cartella all'altra:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg
Basta non nominare la cartella rm -rf *
(sì, a proposito, questo è possibile).
3.dire espandere
Questa è un'opzione interessante che espande le variabili di ambiente premendo Tab:
$ shopt -s direxpand
$ ./[TAB] # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB] # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] # заменяется на...
$ /full/path/to/home/folder
uscita pulita
4. controlla i lavori
Questa opzione interrompe la disconnessione dalla sessione se ci sono ancora lavori in esecuzione in background.
Invece di uscire, viene visualizzato un elenco di attività non completate. Se vuoi ancora uscire, entra di nuovo exit
.
$ shopt -s checkjobs
$ echo $$
68125 # <= ID процесса для оболочки
$ sleep 999 &
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ echo $$
68125 # <= ID процесса для оболочки тот же
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ exit
$ echo $$
$ 59316 # <= на этот раз ID процесса изменился
Superpoteri sostitutivi
5.globstar
Questa opzione ti dà superpoteri sostitutivi! Se inserisci:
$ shopt -s globstar
$ ls **
quindi 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]
Display all 2033 possibilities? (y or n)
6.extglob
Questa opzione abilita le funzionalità più comunemente associate alle espressioni regolari. A volte questo è molto utile:
$ shopt -s extglob
$ touch afile bfile cfile
$ ls
afile bfile cfile
$ ls ?(a*|b*)
afile bfile
$ ls !(a*|b*)
cfile
Qui i motivi sono posti tra parentesi e separati da una barra verticale. Ecco gli operatori disponibili:
? = corrisponde a zero o una occorrenza dei modelli indicati! = mostra tutto ciò che non corrisponde ai modelli specificati * = zero o più occorrenze + = una o più occorrenze @ = esattamente una occorrenza
Protezione contro gli infortuni
7. histverifica
All'inizio può essere un po' spaventoso utilizzare i comandi di avvio rapido della cronologia delle abbreviazioni !!
и !$
.
Opzione histverify
ti consente di vedere prima come Bash interpreta il comando prima che venga effettivamente eseguito:
$ shopt -s histverify
$ echo !$ # <= По нажатию Enter команда не запускается
$ echo histverify # <= Она сначала демонстрируется на экране,
histverify # <= а потом запускается
8. Noclobber
Ancora una volta, per proteggersi da incidenti, ovvero dalla sovrascrittura di un file già esistente con l'operatore di reindirizzamento (>
). Questo può essere un disastro se non si dispone di un backup.
Opzione set -С
vieta tale sovrascrittura. Se necessario, è possibile bypassare la protezione utilizzando l'operatore >|
:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$
Fonte: habr.com