Ich frage mich, wie ich eines dieser Dinge in C erreichen kann, sodass es genauso bestehen bleibt wie in ~/.bashrc
oder ~/.bash_profile
:
export PATH=~/bin:$PATH
export PS1="$ "
Ich frage mich, ob ich dieexecl
Befehlungefähr so:
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
int main (void) {
return execl("/bin/export", "...", NULL);
}
Oder ob es eine andere idiomatische C-Möglichkeit gibt, dies ordnungsgemäß zu erreichen.
Antwort1
Sie können keine Variablen aus einem Programm in die übergeordnete Shell exportieren, da es nicht möglich ist, die Umgebung eines anderen Prozesses zu ändern.
Wenn Sie einen untergeordneten Prozess einrichten möchten, siehe man setenv
oder man execve
.
Bearbeiten
Der Unterschied besteht darin, dass es .bashrc
von der Shell selbst ausgeführt wird und nicht von einem Unterprozess der Shell. Da es von der Shell ausgeführt wird, kann es die Umgebung der Shell ändern.
Die einzige Möglichkeit, dies zu umgehen, besteht darin, Befehle zu erstellen, die von der Shell ausgeführt werden:
main ()
{
printf ("PATH=/dir\n");
}
Führen Sie dann in der Shell die Ausgabe dieses Befehls aus:
$(./myenv)
Oder
./myenv > /tmp/file
source /tmp/file
Es ist jedoch immer noch die Shell, die ihre eigene Umgebung ändert. Sie tut dies lediglich durch die Ausführung von Befehlen, die von einem Programm generiert werden.