Quería hacer un C
programa simple para cambiar a mi directorio de proyectos. Su contenido es el siguiente:
#include <unistd.h>
int main()
{
chdir("/home/enedil/projects/algo");
return 0;
}
Lo compilé con el siguiente comando ( pro.c
es su nombre de archivo):
gcc pro.c -o /usr/local/bin/pro
No hubo errores ni advertencias. Pero cuando lo ejecuto, no cambia el directorio. ¿Por qué?
process
c
cd-command
enedil
fuente
fuente
alias proj='cd ~/enedil/projects/algo'
cd ~/projects/algo
? Es una idea!Respuestas:
Su programa hace exactamente lo que te diga que hacer: se cambia el directorio de trabajo para sí a
/home/enedil/projects/algo
. Pero una vez que sale, se restaura el directorio de trabajo del shell .Supongo que lo que quieres lograr es cambiar el directorio de trabajo del proceso padre, es decir, el shell, sin recurrir a un simple
cd
. Hay un método , pero como dice su autor: no lo hagas.fuente
El directorio de trabajo actual es local para el proceso. Entonces, lo que quieres no es posible.
fuente
También puede usar la
CDPATH
variable ambiental. Como se explica enman bash
:Entonces, por ejemplo, podría agregar esta línea a su
~/.profile
:Ahora puede ejecutar
cd projects
desde cualquier directorio y moverse a~/projects
.fuente
Para hacer esto para el shell, use el
source
comando (alias.
). Ejecutará la aplicación en el contexto del shell actual en lugar de crear un nuevo contexto de shell. Así es como también puede establecer variables de entorno. Si observa todos los scripts de inicio en/etc/rc.d
o/etc/init.d
, verá muchos scripts incluidos por otros scripts con el comandoEsto
.
provoca que el script/etc/init.d/rcvars
se modifique y que todo lo que cambie persista en el entorno actual.fuente