Oito opcións de Bash pouco coñecidas

Algunhas opcións de Bash son coñecidas e úsanse a miúdo. Por exemplo, moitas persoas escriben ao comezo do guión

set -o xtrace

para depurar,

set -o levantado

saír por erro ou

set -o errunset

para saír se a variable chamada non está definida.

Pero hai moitas outras opcións. Ás veces descríbense de forma demasiado confusa en manas, polo que recompilei aquí algunhas das máis útiles, con explicación.

Nota: os Mac poden ter unha versión máis antiga de bash (3.x en lugar de 4.x) onde non todas estas opcións están dispoñibles. Neste caso, véxase aquí ou aquí.

set ou shopt?

Hai dúas formas de configurar as opcións de bash: desde un script ou desde a liña de comandos. Podes usar comandos integrados set и shopt. Ambos cambian o comportamento do shell, fan o mesmo (con argumentos diferentes), pero difiren no seu orixe... Opcións set son herdados ou prestados de parámetros doutros shells, mentres que os parámetros shopt creado en bash.

Se queres ver as opcións actuais, executa:

$ set -o
$ shopt

Para activar a opción en set Emprégase sintaxe longa ou curta:

$ set -o errunset
$ set -e

O efecto é o mesmo.

Para desactivar a opción, cómpre poñer un plus en lugar dun menos:

$ set +e

Durante moito tempo non recordaba esta sintaxe porque a lóxica parecía incorrecta (un signo menos activa a opción e un signo máis desactivala).

В shopt As bandeiras (máis lóxicas) úsanse para activar e desactivar as opcións -s (conxunto) e -u (desactivado):

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

Cambiando directorios

Hai varias opcións que che axudan a traballar con directorios.

1.cdspell

Con esta configuración, bash comezará a comprender os erros tipográficos e levarache ao cartafol cuxo nome escribiches mal.

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

Levo moitos anos usando esta opción e moi raramente (quizais unha vez ao ano) toma unha decisión moi estraña. Pero noutros días cdspell aforra tempo, literalmente todos os días.

2. autocd

Se non estás disposto a aceptar a ineficacia de varias entradas cd, entón pode configurar esta opción para moverse ao cartafol X se o comando X non existe.

$ shopt -s autocd
$ abcdefg
$ cd ..

Combinado co autocompletado, isto permítelle saltar rapidamente entre cartafoles:

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

Simplemente non nomees o cartafol rm -rf * (si, por certo, isto é posible).

3.directexpand

Esta é unha opción xenial que amplía as variables de 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

Saída limpa

4. traballos de verificación

Esta opción deixa de saír da sesión se aínda hai traballos en execución en segundo plano.

En lugar de saír, móstrase unha lista de tarefas sen rematar. Se aínda queres saír, entra de novo 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 процесса  изменился

Superpoderes de substitución

5.globstar

Esta opción dáche superpoderes de substitución! Se entras:

$ shopt -s globstar
$ ls **

entón o shell mostrará todos os directorios e subdirectorios de forma recursiva.

En conxunto con direxpand Podes ver rapidamente todo o que se atopa abaixo na xerarquía:

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

6.extglob

Esta opción activa funcións que se asocian máis habitualmente coas expresións regulares. Ás veces isto é moi útil:

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

Aquí os patróns colócanse entre parénteses e sepáranse por unha barra vertical. Aquí están os operadores dispoñibles:

? = coincide con cero ou unha aparición dos patróns indicados! = mostrar todo o que non coincide cos patróns indicados * = cero ou máis ocorrencias + = unha ou máis ocorrencias @ = exactamente unha ocorrencia

Protección contra accidentes

7. histverify

Pode dar un pouco de medo ao principio usar os comandos de inicio rápido do historial de abreviaturas !! и !$.

Opción histverify permíteche ver primeiro como Bash interpreta o comando antes de que se execute:

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

8. Noclobber

De novo, para protexerse de accidentes, é dicir, de sobrescribir un ficheiro que xa existe co operador de redirección (>). Isto pode ser un desastre se non tes unha copia de seguridade.

Opción set -С prohíbe tal sobreescritura. Se é necesario, pode evitar a protección mediante o operador >|:

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

Fonte: www.habr.com

Engadir un comentario