Me pregunto cómo lograr una de estas cosas desde C, para que persista como lo haría desde ~/.bashrc
o ~/.bash_profile
:
export PATH=~/bin:$PATH
export PS1="$ "
Me pregunto si debería usar elexecl
dominioalgo así como esto:
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
int main (void) {
return execl("/bin/export", "...", NULL);
}
O si hay otra forma idiomática en C de lograr esto correctamente.
Respuesta1
No puede exportar variables de un programa al shell principal porque no es posible modificar el entorno de otro proceso.
Si desea configurar un proceso hijo, consulte man setenv
o man execve
.
Editar
La diferencia es que .bashrc
lo ejecuta el propio shell, no mediante un subproceso del shell. Como lo ejecuta el shell, puede modificar el entorno del shell.
La única forma de solucionar esto es crear comandos que serán ejecutados por el shell:
main ()
{
printf ("PATH=/dir\n");
}
Luego, en el Shell, ejecute la salida de ese comando:
$(./myenv)
O
./myenv > /tmp/file
source /tmp/file
Pero sigue siendo el shell el que modifica su propio entorno, simplemente lo hace ejecutando comandos que se generan a partir de algún programa.