Ocho opciones de Bash poco conocidas

Algunas opciones de Bash son bien conocidas y se utilizan con frecuencia. Por ejemplo, mucha gente escribe al principio del guión.

establecer -o xtrace

para depurar,

establecer -o salida de error

salir por error o

set -o conjunto de errores

para salir si la variable llamada no está configurada.

Pero hay muchas otras opciones. A veces se describen de manera demasiado confusa en manas, por lo que he recopilado aquí algunos de los más útiles, con una explicación.

Nota: Las Mac pueden tener una versión anterior de bash (3.x en lugar de 4.x) donde no todas estas opciones están disponibles. En este caso, ver aquí o aquí.

set o shopt?

Hay dos formas de configurar las opciones de bash: desde un script o desde la línea de comando. Puedes usar comandos integrados set и shopt. Ambos cambian el comportamiento del shell, hacen prácticamente lo mismo (con diferentes argumentos), pero difieren en su origen. Opciones set se heredan o se toman prestados de parámetros de otros shells, mientras que los parámetros shopt creado en bash.

Si desea ver las opciones actuales, ejecute:

$ set -o
$ shopt

Para activar la opción en set Se utiliza sintaxis larga o corta:

$ set -o errunset
$ set -e

El efecto es el mismo.

Para deshabilitar la opción, debe poner un más en lugar de un menos:

$ set +e

Durante mucho tiempo no pude recordar esta sintaxis porque la lógica parecía incorrecta (un signo menos habilita la opción y un signo más la deshabilita).

В shopt Las banderas (más lógicas) se utilizan para habilitar y deshabilitar opciones -s (conjunto) y -u (desarmado):

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

Cambiar directorios

Hay varias opciones que le ayudarán a trabajar con directorios.

1.cdspell

Con esta configuración, bash comenzará a comprender los errores tipográficos y lo llevará a la carpeta cuyo nombre escribió mal.

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

He estado usando esta opción durante muchos años y muy raramente (tal vez una vez al año) tomo una decisión muy extraña. Pero otros días cdspell ahorra tiempo, literalmente todos los días.

2. autocd

Si no está dispuesto a aceptar la ineficiencia de múltiples entradas cd, luego puede configurar esta opción para moverse a la carpeta X si el comando X no existe.

$ shopt -s autocd
$ abcdefg
$ cd ..

Combinado con la función de autocompletar, esto le permite saltar rápidamente entre carpetas:

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

Simplemente no le pongas nombre a la carpeta rm -rf * (Sí, por cierto, esto es posible).

3.direxpandir

Esta es una opción interesante que expande las variables de entorno presionando Tab:

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

salida limpia

4. verificar trabajos

Esta opción detiene el cierre de sesión si todavía hay trabajos ejecutándose en segundo plano.

En lugar de salir, se muestra una lista de tareas pendientes. Si aún deseas salir, ingresa nuevamente. 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 sustitución

5.globstar

¡Esta opción te otorga superpoderes de sustitución! Si ingresas:

$ shopt -s globstar
$ ls **

entonces el shell mostrará todos los directorios y subdirectorios de forma recursiva.

En combinacion con direxpand Puede ver rápidamente todo lo que se encuentra en los niveles inferiores de la jerarquía:

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

6.extglob

Esta opción habilita funciones que se asocian más comúnmente con expresiones regulares. A veces esto es muy útil:

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

Aquí los patrones se colocan entre paréntesis y están separados por una barra vertical. Estos son los operadores disponibles:

? = coincide con cero o una ocurrencia de los patrones dados! = mostrar todo lo que no coincide con los patrones dados * = cero o más ocurrencias + = una o más ocurrencias @ = exactamente una ocurrencia

Protección contra accidentes

7. histverificar

Puede dar un poco de miedo al principio utilizar los comandos de inicio rápido del historial de abreviaturas. !! и !$.

Opcion histverify le permite ver primero cómo Bash interpreta el comando antes de ejecutarlo:

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

8. No Clobber

Nuevamente, para protegerse contra accidentes, es decir, contra sobrescribir un archivo que ya existe con el operador de redireccionamiento (>). Esto puede ser un desastre si no tienes una copia de seguridad.

Opcion set -С prohíbe dicha sobrescritura. Si es necesario, puede omitir la protección utilizando el operador. >|:

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

Fuente: habr.com

Añadir un comentario