Vuit opcions de Bash poc conegudes

Algunes opcions de Bash són ben conegudes i s'utilitzen sovint. Per exemple, molta gent escriu al principi del guió

setembre -o xtrace

per depurar,

setembre -o errexit

sortir per error o

set -o errunset

per sortir si la variable cridada no està establerta.

Però hi ha moltes altres opcions. De vegades es descriuen de manera massa confusa a manas, així que n'he recollit algunes de les més útils aquí, amb explicació.

Nota: els Mac poden tenir una versió anterior de bash (3.x en lloc de 4.x) on no totes aquestes opcions estan disponibles. En aquest cas, vegeu aquí o aquí.

set o shopt?

Hi ha dues maneres d'establir les opcions de bash: des d'un script o des de la línia d'ordres. Podeu utilitzar ordres integrades set и shopt. Tots dos canvien el comportament de l'intèrpret d'ordres, fan pràcticament el mateix (amb arguments diferents), però difereixen en el seu origen... Opcions set s'hereten o prenen en préstec de paràmetres d'altres shells, mentre que els paràmetres shopt creat en bash.

Si voleu veure les opcions actuals, executeu:

$ set -o
$ shopt

Per activar l'opció a set S'utilitza la sintaxi llarga o curta:

$ set -o errunset
$ set -e

L'efecte és el mateix.

Per desactivar l'opció, heu de posar un avantatge en lloc d'un menys:

$ set +e

Durant molt de temps no vaig poder recordar aquesta sintaxi perquè la lògica semblava incorrecta (un signe menys activa l'opció i un signe més la desactiva).

В shopt (més lògics) s'utilitzen per habilitar i desactivar opcions -s (conjunt) i -u (desactivat):

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

Canvi de directoris

Hi ha diverses opcions que us ajuden a treballar amb directoris.

1.cdspell

Amb aquesta configuració, bash començarà a entendre les errades i us portarà a la carpeta el nom de la qual heu escrit malament.

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

He estat utilitzant aquesta opció durant molts anys i molt poques vegades (potser un cop a l'any) pren una decisió molt estranya. Però altres dies cdspell estalvia temps, literalment cada dia.

2. autocd

Si no esteu disposat a acceptar la ineficiència de múltiples entrades cd, llavors podeu configurar aquesta opció per moure's a la carpeta X si l'ordre X no existeix.

$ shopt -s autocd
$ abcdefg
$ cd ..

Combinat amb l'emplenament automàtic, això us permet saltar ràpidament entre carpetes:

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

Simplement no poseu nom a la carpeta rm -rf * (sí, per cert, això és possible).

3.directexpand

Aquesta és una opció fantàstica que expandeix les variables d'entorn prement Tab:

$ shopt -s direxpand
$ ./[TAB]     # заменяется на...
$ /full/path/to/current_working_folder
$ ~/[TAB]     # заменяется на...
$ /full/path/to/home/folder
$ $HOME/[TAB] #  заменяется на...
$ /full/path/to/home/folder

sortida neta

4. feines de control

Aquesta opció deixa de tancar la sessió si encara hi ha treballs en execució en segon pla.

En lloc de sortir, es mostra una llista de tasques no finalitzades. Si encara voleu sortir, torneu a entrar 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 процесса  изменился

Superpoders de substitució

5.globstar

Aquesta opció us ofereix superpoders de substitució! Si entreu:

$ shopt -s globstar
$ ls **

aleshores l'intèrpret d'ordres mostrarà tots els directoris i subdirectoris de forma recursiva.

En combinació amb direxpand Podeu veure ràpidament tot el que hi ha a la part inferior de la jerarquia:

$ shopt -s direxpand
$ ls **[TAB][TAB]
Display all 2033 possibilities? (y or n) 

6.extglob

Aquesta opció activa les funcions que s'associen més habitualment amb expressions regulars. De vegades això és molt útil:

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

Aquí els patrons es col·loquen entre parèntesis i separats per una barra vertical. Aquests són els operadors disponibles:

? = coincideix amb zero o una ocurrència dels patrons donats! = mostra tot el que no coincideix amb els patrons donats * = zero o més ocurrències + = una o més ocurrències @ = exactament una ocurrència

Protecció d'accidents

7. histverify

Al principi pot fer una mica de por utilitzar les ordres d'inici ràpid de l'historial d'abreviatures !! и !$.

Opció histverify primer us permet veure com Bash interpreta l'ordre abans que s'executi realment:

$ shopt -s histverify
$ echo !$          # <= По нажатию Enter команда не запускается
$ echo histverify  # <= Она сначала демонстрируется на экране,
histverify         # <= а потом запускается 

8. Noclobber

De nou, per protegir contra accidents, és a dir, de sobreescriure un fitxer que ja existeix amb l'operador de redirecció (>). Això pot ser un desastre si no teniu una còpia de seguretat.

Opció set -С prohibeix aquesta sobreescriptura. Si cal, podeu evitar la protecció mitjançant l'operador >|:

$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$

Font: www.habr.com

Afegeix comentari