Querendo saber como realizar uma dessas coisas em C, para que persista como aconteceria em ~/.bashrc
ou ~/.bash_profile
:
export PATH=~/bin:$PATH
export PS1="$ "
Querendo saber se devo usar oexecl
comandomais ou menos assim:
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
int main (void) {
return execl("/bin/export", "...", NULL);
}
Ou se existe outra maneira idiomática em C de fazer isso corretamente.
Responder1
Você não pode exportar variáveis de um programa para o shell pai porque não é possível modificar o ambiente de outro processo.
Se você quiser configurar um processo filho, consulte man setenv
ou man execve
.
Editar
A diferença é que .bashrc
é executado pelo próprio shell, não por um subprocesso do shell. À medida que é executado pelo shell, pode modificar o ambiente do shell.
A única maneira de contornar isso é criar comandos que serão executados pelo shell:
main ()
{
printf ("PATH=/dir\n");
}
Em seguida, no Shell, execute a saída desse comando:
$(./myenv)
Ou
./myenv > /tmp/file
source /tmp/file
Mas ainda é o shell que modifica seu próprio ambiente, apenas executando comandos gerados a partir de algum programa.