¿Por qué no puedo cambiar directorios usando "cd" en un script?

Resuelto ashokgelal asked hace 16 años • 33 respuestas

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 chmody lo copié en /usr/bin. Cuando lo llamo por:, projno hace nada. ¿Qué estoy haciendo mal?

ashokgelal avatar Nov 01 '08 09:11 ashokgelal
Aceptado

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"
Greg Hewgill avatar Nov 01 '2008 02:11 Greg Hewgill

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

Adam Liss avatar Nov 01 '2008 02:11 Adam Liss