¿Por qué no puedo cambiar directorios usando "cd" en un script?
Estoy intentando escribir un pequeño script para cambiar el directorio actual al directorio de mi proyecto:
#!/bin/bash
cd /home/tree/projects/java
Guardé este archivo como proyecto, agregué permiso de ejecución con chmod
y lo copié en /usr/bin
. Cuando lo llamo por:,
proj
no hace nada. ¿Qué estoy haciendo mal?
Los scripts de Shell se ejecutan dentro de un subshell, y cada subshell tiene su propio concepto de cuál es el directorio actual. Tiene cd
éxito, pero tan pronto como sale el subshell, regresa al shell interactivo y nada cambia allí.
Una forma de solucionar esto es utilizar un alias:
alias proj="cd /home/tree/projects/java"
¡No estás haciendo nada malo! Ha cambiado el directorio, pero solo dentro del subshell que ejecuta el script.
Puede ejecutar el script en su proceso actual con el comando "punto":
. proj
Pero preferiría la sugerencia de Greg de usar un alias en este caso simple.