Conceptos básicos de scripts de shell en Linux: cambio de directorio en scripts de shell 🐧↓
Es posible que desee ejecutar un script de shell que cambie su directorio de trabajo actual a otro directorio para su conveniencia.
Por ejemplo, si visita con frecuencia su directorio de documentos (~/Documents) y desea navegar allí rápidamente, puede escribir un script Bash para hacerlo.
En este hilo, les mostraré cómo hacerlo con el comando cd. A lo largo del proceso, explicaré algunas de las complejidades de su comportamiento.
Un problema común. Comencemos con un script que navega al directorio ~/Documents. Lo llamaré https://t.co/C30eEhxKsc:
🐧 Desglosando nuestro código: • cd /home/linuxopsys/Documents - cambia el directorio de trabajo actual a ~/Documents. • pwd - imprime el directorio de trabajo. • echo $$ - $$ es una variable interna de Bash que contiene el ID de proceso (PID) del shell que está ejecutando su script.
🐧 Ejecutando nuestro script Como podemos ver, ejecutar nuestro script da como resultado la salida esperada de /home/linuxopsys/Documents así como el ID del proceso del shell.
Comprobando dónde estamos ahora que se ha ejecutado el script.
Se puede ver claramente que nuestro directorio no ha cambiado. No lo esperábamos porque el directorio actual no se había cambiado a /home/linuxopsys/Documents. Entonces, ¿cuál podría ser el problema? Veamos el ID del proceso de nuestro shell:
Podemos ver claramente que el ID del proceso del shell en el que estamos (PID 4504) y el script de shell (PID 4574) son totalmente diferentes.
Este es un comportamiento común. El script se ejecuta en su propio shell independiente (subshell/shell secundario). Al finalizar el script, este shell independiente sale, dejando el shell principal, en el que nos encontramos actualmente y que no se ve afectado.
La pregunta ahora es: ¿cómo solucionamos este problema? Continúe leyendo.
🐧 Ejecutar scripts en el shell padre Podemos usar el comando source para permitir que nuestro script ejecute comandos en el shell actual (shell padre).
El comando source ejecuta comandos dentro del contexto actual del shell en lugar de iniciar uno nuevo. El operador punto es un alias de acceso directo para el comando source (.). ¡Genial! Como resultado, podemos ejecutar un script bash en el shell actual. Probemos esto:
El fragmento anterior muestra claramente que el PID del script es el del shell padre que lo ejecutó, y el directorio actual de nuestro shell padre ahora es ~/Documents.
¡Genial! Hasta ahora, hemos demostrado que podemos ejecutar scripts de shell en el shell actual usando el código fuente. Como alternativa, podríamos haber usado el operador . abreviado.
🐧 Uso de funciones de Bash. Escribir un script de Bash para cada directorio es un fastidio. En lugar de eso, podríamos combinar varios comandos de Bash en un solo script:
Ahora, si obtenemos el archivo, podemos usar las funciones del script en nuestra terminal actual.
🐧 Uso de alias. Con el comando alias integrado, podemos mejorar aún más nuestras funciones de Bash. Al requerir menos escritura, un alias es más práctico que una función. Convirtamos nuestras funciones en sus variantes de alias:
En comparación con las funciones bash anteriores, podemos observar su concisión. Además, el alias se puede usar de la misma manera que las funciones.
¡Listo! En este hilo, vimos varias maneras de usar el comando cd desde scripts de Bash.
Para empezar, descubrimos que ejecutar un script de shell inicia su propio proceso. Finalmente, analizamos cómo las funciones y el comando alias podrían ayudarnos a mejorar nuestros scripts de Bash.
Gracias por llegar hasta aquí y espero que este hilo te haya resultado útil. Tus comentarios son muy apreciados.
¡Visítanos en @linuxopsys si te gustó este hilo! Tuitearemos más sobre Linux, administración de sistemas y DevOps a diario.