He leído esta pregunta y respuesta, pero no se ajusta a mi problema, aunque sea similar.
Estoy escribiendo un script (llamado cpj) que lanzará uno de mis proyectos actuales. Tengo alrededor de 5 de ellos. Cuando escribo
$ cpj blah
Quiero que el directorio de trabajo actual cambie al directorio del proyecto bla (que tengo en $ PROJDIR) y quiero que emacsclient abra el archivo principal para ese proyecto (que tengo en $ MAINFILE).
La pregunta que cité dice que no puede cambiar directamente el entorno del shell que ejecuta el script, pero puede obtener un script y lo hará.
Para probar esto, escribí un script de shell (llamado chcwd) que tiene una línea:
cd $1
Si, desde la línea de comando hago:
$ . chcwd $PROJDIR
mi directorio de trabajo actual cambiará como lo desee. Si, por otro lado, desde mi script cpj, tengo la misma línea:
. chcwd $PROJECT
no cambiará el directorio de trabajo actual del shell. Me doy cuenta de que estoy ejecutando 2 scripts (cpj y luego chcwd), y creando 2 shells, pero no veo forma de hacer lo que quiero. ¿Alguien puede mostrarme cómo lograr mi objetivo?
fuente
Tengo un guión similar escrito para mi uso personal. Hay un truco muy fácil para lograr cambiar el directorio de trabajo dentro de un script. Primero solo escribe tu guión, en ej .:
Ahora supongamos que el script se llama 'cdto'. Para que funcione, debe obtenerlo en el shell actual, lo que se puede lograr con 'fuente' o ''. comando (ambos son lo mismo). En ej .:
Ahora para hacerlo más conveniente:
Copie el script 'cdto' en el directorio 'bin' de su cuenta (por ejemplo, / home / johnsmith / bin; créelo si no existe). Verifique su variable PATH para asegurarse de que el directorio 'bin' esté incluido:
echo $ RUTA
De lo contrario, edite su archivo .profile y agregue:
Agregue un alias a su archivo .bashrc o .bash_aliases:
alias cdto = '. cdto '
Y ya está hecho. Después del próximo inicio de sesión o cuando abra una nueva terminal, puede usar in.ex .:
Disfruta :-)
Sebastian Piech
fuente
Un simple truco para hacer esto:
Ahora el directorio de trabajo es $ PROJECT.
fuente