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
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 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