Algunas opciones de Bash son bien conocidas y se usan a menudo. Por ejemplo, muchos al principio de un script escriben
set -o xtrace
para depuración,
set -o errexit
para salir en caso de error o
set -o errunset
para salir si una variable llamada no está establecida.
Pero hay muchas otras opciones. A veces están descritas de forma confusa en las manpages, así que he recopilado algunas de las más útiles aquí, con explicación.
Nota: en Mac puede haber una versión anterior de bash (3.x, en lugar de 4.x), donde no todas estas opciones están disponibles. En este caso, consulte o .
set o shopt?
Hay dos formas de establecer parámetros de bash: desde un script o desde la línea de comandos. Se pueden usar comandos integrados set y shopt. Ambos cambian el comportamiento de la shell, hacen en gran medida lo mismo (con diferentes argumentos), y se diferencian en su . Los parámetros set se heredan o se toman prestados de los parámetros de otras shells, mientras que los parámetros shopt se crean en bash.
Si quiere ver las opciones actuales, ejecute:
$ set -o
$ shopt Para activar la opción en set se usa una sintaxis corta o larga:
$ set -o errunset
$ set -eEl efecto es el mismo.
Para desactivar una opción, hay que poner un más en lugar de un menos:
$ set +eDurante mucho tiempo no pude recordar esta sintaxis, ya que la lógica parece incorrecta (el menos activa la opción y el más la desactiva).
En shopt para activar y desactivar opciones se usan (más lógicas) flags -s (set) y -u (unset):
$ shopt -s cdspell # <= on
$ shopt -u cdspell # <= offCambio de directorios
Hay algunas opciones que ayudan a trabajar con directorios.
1. cdspell
Con esta configuración, bash comenzará a entender errores tipográficos y te llevará a la carpeta cuyo nombre escribiste incorrectamente.
$ shopt -s cdspell
$ mkdir abcdefg
$ cd abcdeg
abcdefg
$ cd .. He usado esta opción durante muchos años, y muy raramente (quizás una vez al año) toma una decisión muy extraña. Pero en los demás días cdspell ahorra tiempo, literalmente cada día.
2. autocd
Si no estás dispuesto a lidiar con la ineficiencia de ingresar repetidamente cd, puedes establecer esta opción para moverte a la carpeta X si el comando X no existe.
$ shopt -s autocd
$ abcdefg
$ cd ..Combinado con la autocompletación, permite saltar rápidamente entre carpetas:
$ ./abc[TAB][RETURN]
cd -- ./abcdefg Solo no le pongas el nombre rm -rf * (sí, por cierto, esto es posible).
3. direxpand
Es una opción genial que expande variables de entorno al presionar Tab:
$ shopt -s direxpand
$ .\/[TAB] # se reemplaza por...
$ \/full\/path\/to\/current_working_folder
$ ~\/[TAB] # se reemplaza por...
$ \/full\/path\/to\/home\/folder
$ $HOME\/[TAB] # se reemplaza por...
$ \/full\/path\/to\/home\/folderSalida limpia
4. checkjobs
Este parámetro detiene la salida de la sesión si todavía hay tareas en segundo plano en ejecución.
En lugar de salir, se muestra una lista de tareas pendientes. Si aún deseas salir, ingresa de nuevo exit.
$ shopt -s checkjobs
$ echo $$
68125 # <= ID del proceso para la consola
$ sleep 999 &
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ echo $$
68125 # <= ID del proceso para la consola sigue siendo el mismo
$ exit
There are running jobs.
[1]+ Running sleep 999 &
$ exit
$ echo $$
$ 59316 # <= esta vez el ID del proceso ha cambiadoSuperpoderes de expansión
5. globstar
¡Esta opción te da superpoderes de expansión! Si introduces:
$ shopt -s globstar
$ ls **entonces la consola mostrará recursivamente todos los directorios y subdirectorios.
En combinación con direxpand puedes explorar rápidamente todo lo que está por debajo en la jerarquía:
$ shopt -s direxpand
$ ls **[TAB][TAB]
¿Mostrar todas las 2033 posibilidades? (y o n) 6. extglob
Esta opción activa 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*)
cfileAquí, los patrones se colocan entre paréntesis y se separan por una barra vertical. Aquí están los operadores disponibles:
? = соответствует нулю или одному вхождению заданных шаблонов ! = показать всё, что не соответствует заданным шаблонам * = ноль или более вхождений + = одно или более вхождений @ = ровно одно вхождение
Protección contra accidentes
7. histverify
Al principio puede ser un poco intimidante usar el lanzamiento rápido de comandos desde el historial con abreviaturas !! y !$.
La opción histverify te permite ver primero cómo Bash interpreta el comando antes de que realmente se ejecute:
$ shopt -s histverify
$ echo !$ # <= Al presionar Enter, el comando no se ejecuta
$ echo histverify # <= Se muestra primero en la pantalla,
histverify # <= y luego se ejecuta 8. Noclobber
De nuevo, para proteger contra accidentes, específicamente contra la sobreescritura de un archivo que ya existe con un operador de redirección (>). Esto puede ser catastrófico si no tienes una copia de seguridad.
La opción set -C prohíbe tal sobreescritura. Si es necesario, puedes eludir la protección con el operador >|:
$ touch afile
$ set -C
$ echo something > afile
-bash: afile: cannot overwrite existing file
$ echo something >| afile
$Fuente: habr.com
