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