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
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]
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
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 !$
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 $