Ocho opciones de Bash poco conocidas

Algunas opciones de Bash son bien conocidas y de uso frecuente. Por ejemplo, muchos escriben al comienzo de un guión

  set -o xtrace 

para depurar,

  set -o errexit 

salir por error o

  set -o errunset 

para salir si la variable llamada no está establecida.

Pero hay muchas otras opciones. A veces están demasiado confundidos como se describe en mans, así que reuní aquí algunos de los más útiles, con una explicación.

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

set o shopt ?


Hay dos formas de establecer los parámetros de bash: desde un script o desde la línea de comandos. Puede usar los shopt set y shopt . Ambos cambian el comportamiento del shell, hacen lo mismo (con diferentes argumentos) y difieren en su origen . set parámetros set se heredan o se toman prestados de los parámetros de otros shells, mientras que los parámetros shopt crean en bash.

Si desea ver las opciones actuales, ejecute:

 $ set -o $ shopt 

Para activar una opción en set , se usa una 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 parece estar equivocada (menos activa la opción y más la desactiva).

shopt utiliza los shopt (más lógicos) -s (conjunto) y -u (sin establecer) para habilitar y deshabilitar las opciones:

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

Cambios de directorio


Hay varias opciones que lo ayudan a trabajar con directorios.

1. cdspell


Con esta configuración, bash comenzará a comprender los errores tipográficos y lo transferirá a una carpeta cuyo nombre escribió con un error.

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

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

2. autocd


Si no está listo para soportar la ineficiencia de la entrada repetida de cd , puede configurar esta opción para moverse a la carpeta X si el comando X no existe.

 $ shopt -s autocd $ abcdefg $ cd .. 

En combinación con el autocompletado, esto le permite saltar rápidamente a las carpetas:

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

Simplemente no rm -rf * carpeta rm -rf * (sí, por cierto, esto es posible).

3. Direxpand


Esta es una opción genial que extiende 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. checkjobs


Esta opción detiene la salida de la sesión si los trabajos aún se están ejecutando en segundo plano.

En lugar de salir, se muestra una lista de tareas incompletas. Si aún desea salir, ingrese exit nuevamente.

 $ 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   

Habilidades de sustitución


5. globstar


¡Esta opción te da habilidades de sustitución supernormal! Si ingresas:

 $ shopt -s globstar $ ls ** 

entonces el shell mostrará recursivamente todos los directorios y subdirectorios.

En combinación con direxpand puede ver rápidamente todo lo siguiente en la jerarquía:

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

6.extglob


Esta opción activa funciones que se asocian más a menudo con expresiones regulares. Esto a veces 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 se separan mediante una barra vertical. Aquí están los operadores disponibles:

  ?  = coincide con cero o una ocurrencia de los patrones dados
 !  = muestra 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. histverify


¡Al principio, puede ser un poco aterrador usar el uso de comandos de inicio rápido del historial de abreviaturas !! y !$ .

La opción histverify permite ver primero cómo Bash interpreta el comando antes de que realmente comience:

 $ shopt -s histverify $ echo !$ # <=   Enter    $ echo histverify # <=     , histverify # <=    

8. Noclobber


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

La opción 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 $ 

Source: https://habr.com/ru/post/452522/


All Articles