6 Shells alternativos

Bash, o el Bourne Again Shell, es lo que viene preinstalado en la mayoría de las distros de Linux. Sin embargo, no es el única sehell allí afuera. Hay varios otros para probar. Aquí hay seis shells alternativos que pueden reemplazar bash. Cada uno de ellos tiene sus pros y sus contras, así que tienes que probarlos y ver cuál es el mejor para usted. Continuar leyendo “6 Shells alternativos”

Accesos directos de Bash para máxima productividad

Puede o no sorprenderle saber que el shell bash tiene una serie muy rica de accesos directos  que pueden hacer que su vida, trabajando con la línea de comandos sea mucho más fácil. Esta capacidad para editar la línea de comandos mediante atajos es proporcionada por la biblioteca GNU Readline. Esta biblioteca es utilizada por muchas otras aplicaciones de * nix además de bash, así que aprender algunos de estos atajos no sólo le permitirá crear comandos zip bash con una facilidad absurda :), sino que también puede hacerte más eficiente en el uso de una variedad de otros * nix . No quiero entrar en Readline demasiado profundamente por lo que voy a mencionar una cosa más. De forma predeterminada, Readline utiliza los enlaces de emacs, aunque se puede configurar para usar el modo de edición vi, sin embargo prefiero aprender el comportamiento predeterminado de la mayoría de las aplicaciones (me parece que hace que mi vida sea más fácil no tener que personalizar cosas constantemente). Si estás familiarizado con emacs, entonces muchos de estos atajos no serán nuevos para ti, así que estos son principalmente para el resto de nosotros :). Continuar leyendo “Accesos directos de Bash para máxima productividad”

Cómo personalizar colores y contenido de Bash en el prompt de terminal de Linux

Actualizar Fedora 24 a 25 con DNF

Hoy, Bash es el shell por defecto en la mayoría (si no en todas) las distribuciones modernas de Linux. Sin embargo, es posible que haya notado que el color del texto en el terminal y el contenido del mensaje pueden ser diferentes de una distro a otra.

En caso de que se han estado preguntando cómo personalizar esto para una mejor accesibilidad o mero capricho, les montreré como puede cambiarlo.

Variable de entorno de Bash PS1

El símbolo del sistema y el aspecto del terminal están gobernados por una variable de entorno denominada PS1. De acuerdo con la página de manual Bash, PS1 representa la cadena del prompt principal que se muestra cuando el shell está listo para leer un comando.

El contenido permitido en PS1 consta de varios caracteres especiales de escape invertido cuyo significado se muestra en la sección PROMPTING de la página de manual.

Para ilustrar, vamos a mostrar el contenido actual de PS1 en nuestro sistema (esto puede ser algo diferente en su caso):

$ echo $PS1
[\u@\h \W]\$

Ahora explicaré cómo personalizar PS1 según nuestras necesidades.

Personalización del formato PS1

De acuerdo con la sección PROMPTING en la página de manual, este es el significado de cada carácter especial:

\U: el nombre de usuario del usuario actual.
\H: el nombre de host hasta el primer punto (.) En el nombre de dominio completo.
\W: el nombre de base del directorio de trabajo actual, con $HOME abreviado con un tilde (~).
\$: Si el usuario actual es root, muestra #, $ en caso contrario.

Por ejemplo, es posible que desee considerar la posibilidad de agregar ! Si queremos mostrar el número del historial del comando actual, o \H si queremos mostrar el FQDN en lugar del nombre del servidor corto.

En el ejemplo siguiente, importaremos ambos a nuestro entorno actual ejecutando este comando:


PS1="[\u@\H \W !]\$"

Al presionar Intro, verá que el contenido del mensaje cambia como se muestra a continuación. Compare el mensaje antes y después de ejecutar el comando anterior:

Ahora vamos un paso más allá y cambiamos el color del usuario y el nombre de host en el símbolo del sistema, tanto el texto como el fondo que lo rodea.

En realidad, podemos personalizar 3 aspectos del indicador:

Formato de Texto Color del texto Color de Fondo
30: Negro 40: Negro
1: negrita 31: Rojo 41: Rojo
4: subrayado 32: Verde 42: Verde
33: Amarillo 43: Amarillo
34: Azul 44: Azul
35: Púrpura 45: Púrpura
36: Cian 46: Cian
37: Blanco 47: Blanco

Utilizaremos el carácter especial de \e al principio y un m al final para indicar que lo que sigue es una secuencia de color.

En esta secuencia, los tres valores (fondo, formato y primer plano) se separan por comas (si no se da valor, se asume el valor predeterminado).

Además, dado que los rangos de valores son diferentes, no importa cuál (fondo, formato o primer plano) especifique primero.

Por ejemplo, la siguiente PS1 hará que el mensaje aparezca en texto subrayado amarillo con fondo rojo:


PS1="\e[41;4;33m[\u@\h \W]$ "

Tan bueno como parece, esta personalización sólo durará para la sesión de usuario actual. Si cierra su terminal o sale de la sesión, los cambios se perderán.

Para que estos cambios sean permanentes, deberá añadir la siguiente línea a ~/.bashrc o ~/.bash_profile según su distribución:


PS1="\e[41;4;33m[\u@\h \W]$ "

Siéntase libre de jugar con los colores para encontrar lo que funciona mejor para usted.

Buenos hábitos para el uso de la línea de comando en Linux

Introducción

Cuando se usa un sistema con frecuencia, tiende a caer en patrones de uso establecidos. A veces, no comienzas el hábito de hacer las cosas de la mejor manera posible. A veces, incluso se recogen las malas prácticas que conducen a desorden y torpeza. Una de las mejores maneras de corregir estas insuficiencias es recoger conscientemente buenos hábitos que los contrarrestan. Este artículo sugiere 10 hábitos para los comandos de línea de comando de Linux dignos de recoger. Estos son buenos hábitos que ayudan a romper muchas de las deficiencias de uso comunes y hacerte más productivo en la línea de comandos .

Hacer árboles de directorios de una sola vez

El Listado 1 ilustra uno de los hábitos de UNIX más comunes en torno a: definir árboles de directorio de uno en uno.

Listado 1. : Ejemplo de definición de árboles de directorios de forma individual

~ $ mkdir tmp
~ $ cd tmp
~/tmp $ mkdir a
~/tmp $ cd a
~/tmp/a $ mkdir b
~/tmp/a $ cd b
~/tmp/a/b/ $ mkdir c
~/tmp/a/b/ $ cd c
~/tmp/a/b/c $

Es mucho más rápido usar la opción -p en mkdir y hacer que todos los directorios padre junto con sus hijos en un solo comando. Pero incluso los administradores que conocen esta opción siguen atrapados a través de los subdirectorios a medida que los hacen en la línea de comandos. Vale la pena su tiempo para recoger conscientemente el buen hábito:

Listado 2: Definición de árboles de directorios con un comando

~ $ mkdir -p tmp/a/b/c

Puede utilizar esta opción para crear complejos árboles de directorios complejos, que son ideales para usar dentro de las secuencias de comandos; No sólo jerarquías simples. Por ejemplo:

Listado 3: Definiendo un árbol de directorio complejo

~ $ mkdir -p project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

En el pasado, la única excusa para definir directorios individualmente era que la implementación de mkdir no admitía esta opción, pero esto ya no es cierto en la mayoría de los sistemas. IBM AIX® mkdir, GNU mkdir y otros que cumplen con la especificación Single UNIX ahora tienen esta opción.
Para los pocos sistemas que todavía carecen de la capacidad, utilice el script mkdirhier, que es un contenedor para mkdir que hace la misma función:

~ $ mkdirhier project/{lib/ext,bin,src,doc/{html,info,pdf},demo/stat/a}

Cambiar la ruta; No mueva el archivo

Otro patrón de uso incorrecto es mover un archivo de archivo .tar a un directorio determinado porque sucede que es el directorio en el que desea extraerlo. Nunca necesita hacer esto. Puede desempaquetar cualquier archivo .tar en cualquier directorio que desee, es para lo que está la opción -C. Utilice la opción -C para desempaquetar un archivo comprimido para especificar el directorio para descomprimirlo en:

Listado #4:  Usar la opción -C para desempaquetar un archivo .tar

~ $ tar xvf -C tmp/a/b/c newarc.tar.gz

Hacer un hábito de usar -C es preferible a mover el archivo a donde desea descomprimirlo, cambiar a ese directorio, y sólo entonces extraer su contenido, especialmente si el archivo de archivo pertenece a otro lugar.

Combine sus comandos con los operadores de control

Probablemente ya sepa que en la mayoría de los shells, puede combinar comandos en una sola línea de comandos colocando un punto y coma (;) entre ellos. El punto y coma es un operador de control de shell y, aunque es útil para encadenar varios comandos discretos en una sola línea de comandos, no funciona para todo. Por ejemplo, suponga que utilice un punto y coma para combinar dos comandos en los que la ejecución correcta del segundo comando dependa totalmente de la finalización satisfactoria del primero. Si el primer comando no sale como se esperaba, el segundo comando sigue ejecutándose y falla.

En su lugar, utilice operadores de control más apropiados (algunos se describen en este artículo). Mientras su shell los apoye, valen el conseguir del hábito de usarlos.

Ejecutar un comando sólo si otro comando devuelve un estado de salida cero
Utilice el operador de control && para combinar dos comandos para que el segundo se ejecute sólo si el primer comando devuelve un estado de salida cero. En otras palabras, si el primer comando se ejecuta correctamente, se ejecuta el segundo comando. Si falla el primer comando, el segundo comando no se ejecuta en absoluto. Por ejemplo:

Listado #5: Combinar comandos con operadores de control

~ $ cd tmp/a/b/c && tar xvf ~/archive.tar

En este ejemplo, el contenido del archivo se extrae en el directorio ~ /tmp/a/b/c a menos que ese directorio no exista. Si el directorio no existe, el comando tar no se ejecuta, por lo que no se extrae nada.

Ejecutar un comando sólo si otro comando devuelve un estado de salida distinto de cero

Del mismo modo, el || El operador de control separa dos comandos y ejecuta el segundo comando sólo si el primer comando devuelve un estado de salida distinto de cero. En otras palabras, si el primer comando tiene éxito, el segundo comando no se ejecuta. Si falla el primer comando, ejecuta el segundo comando. Este operador se utiliza a menudo cuando se prueba para saber si un directorio dado existe y, si no, crea uno:

Listado #6 : Combinar comandos con operadores de control

~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c

También puede combinar los controladores descritos en esta sección. Cada uno funciona en el último comando ejecutado:

Listado #7: Combinando operadores de control

~ $ cd tmp/a/b/c || mkdir -p tmp/a/b/c && tar xvf -C tmp/a/b/c ~/archive.tar

Citar variables con precaución

Tenga siempre cuidado con la expansión del shell y los nombres de variables. Generalmente es una buena idea incluir llamadas variables entre comillas dobles, a menos que tenga una buena razón para no hacerlo. Del mismo modo, si está siguiendo directamente un nombre de variable con texto alfanumérico, asegúrese de incluir también el nombre de la variable entre llaves ({}) para distinguirlo del texto que lo rodea. De lo contrario, el shell interpreta el texto final como parte de su nombre de variable, y muy probablemente, devuelve un valor nulo. El Listado 8 proporciona ejemplos de varias citas y no cotizaciones de variables y sus efectos.

Listado#8: Citando (y no citando) una variable

~ $ ls tmp/
a b
~ $ VAR="tmp/*"
~ $ echo $VAR
tmp/a tmp/b
~ $ echo "$VAR"
tmp/*
~ $ echo $VARa
~ $ echo "$VARa"
~ $ echo "${VAR}a"
tmp/*a
~ $ echo ${VAR}a
tmp/a
~ $

Utilizar secuencias de escape para administrar entradas largas

Probablemente haya visto ejemplos de código en los que una barra invertida () continúa con una línea larga hasta la línea siguiente y usted sabe que la mayoría de los shell tratan lo que escribe sobre líneas sucesivas unidas por una barra invertida como una línea larga. Sin embargo, es posible que no aproveche esta función en la línea de comandos tan a menudo como sea posible.

La barra invertida es especialmente útil si su terminal no maneja multilínea que envuelve correctamente o cuando su línea de comando es más pequeña . La barra invertida también es útil para dar sentido a las líneas de entrada largas mientras las escribe, como en el ejemplo siguiente:

Listado #9: Usar backslash para entradas largas de comandos

~ $ cd tmp/a/b/c || \
> mkdir -p tmp/a/b/c && \
> tar xvf -C tmp/a/b/c ~/archive.tar

Alternativamente, la siguiente configuración también funciona:

Listado #10: Alternativa al uso d backslash para entradas largas de comandos

~ $ cd tmp/a/b/c \
> || \
> mkdir -p tmp/a/b/c \
> && \
> tar xvf -C tmp/a/b/c ~/archive.tar

Sin embargo, si se divide una línea de entrada en varias líneas, el shell siempre la trata como una línea continua, ya que siempre borra todas las barras invertidas y espacios adicionales.

Nota: En la mayoría de los shells, al presionar la tecla de flecha hacia arriba, la entrada de línea múltiple completa se vuelve a dibujar en una sola línea de entrada larga.