La pregunta parece de fácil respuesta, pero no, no funciona.
Fíjate en el siguiente script:
En mi carpeta de scripts, tengo un fichero .sh con permisos de ejecución que tiene el aspecto que se muestra en la imagen.
Mostrará un texto en pantalla y luego, con el comando cd, me debería de cambiar a la carpeta de trabajo del curso de Ruby on Rails que estoy haciendo.
Fíjate en la siguiente imagen que NO funciona, no me cambia de directorio. Lanzo la ejecución de mi script y como puedes ver, sigo en la carpeta scripts en todo momento.
¿Por qué NO funciona?
El tema es que, cuando ejecutamos un script, en realidad la consola abre un nuevo proceso en el que en realidad es donde se está ejecutando nuestro script.
Es por eso que, cuando el script termina y devuelve el control al proceso original, que es la bash, ésta no ha sufrido ningún cambio.
Para hacer que un script se ejecute en el proceso actual y que no abra un nuevo proceso tenemos que anteponer la palabra source al comando, al script. Fíjate en la siguiente imagen como ahora mi script sí que funciona:
Efectivamente modificó la carpeta en la que me encuentro.
Pues bien, en lugar de source también podemos usar un punto "." antes de nuestro script y el efecto será el mismo: