Quería hacer un programa C simple para cambiar al directorio de mi proyecto. 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 de directorio. ¿Por qué?
Comentarios
Responder
 Su programa hace exactamente lo que le dice que haga: cambia el directorio de trabajo para  mismo  a /home/enedil/projects/algo. Pero una vez que sale, el directorio de trabajo  shell «s  se restaura. 
 Supongo que es 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. 
Comentarios
- Nitpick, pero el shell ' s directorio de trabajo no ' t restaurado, porque nunca cambió. El shell es simplemente un proceso, al igual que el programa. Cada programa tiene su propio directorio de trabajo '.
 - @Patrick, verdadero. Conceptualmente más preciso sería su directorio de trabajo restaurado, en el sentido de que su proceso " restaurado " (es activo en primer plano).
 
Respuesta
El directorio de trabajo actual es local para el proceso. Entonces, lo que quieres no es posible.
Responder
 También puedes usar CDPATH variable de entorno. Como se explica en man bash: 
 CDPATH The search path for the cd command. This is a colon-separated list of directories in which the shell looks for destination directories specified by the cd command. A sample value is ".:~:/usr". 
 Entonces, por ejemplo, podría agregar esta línea a su ~/.profile: 
CDPATH=~/projects 
 Ahora puede ejecutar cd projects desde cualquier directorio y mover a ~/projects. 
Responder
 Para hacer esto para el shell, use el  source  comando (con alias de .). 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 todas las secuencias de comandos de inicio en /etc/rc.d o /etc/init.d, verá muchas secuencias de comandos que están incluidas en otras secuencias de comandos con el comando 
. /etc/init.d/rcvars 
 El . hace que el script /etc/init.d/rcvars los cambios persisten en el entorno actual. 
Comentarios
- No puede ' ejecutar un programa en C de esta manera, solo un script de shell.
 
alias proj='cd ~/enedil/projects/algo'cd ~/projects/algo? ¡Es una idea!