Otto opzioni Bash poco conosciute

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 qui o qui.

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 origine... Opzioni 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

Aggiungi un commento