Хотите узнать, как выполнить одну из этих задач из C, чтобы она сохранялась так же, как из ~/.bashrc
или ~/.bash_profile
:
export PATH=~/bin:$PATH
export PS1="$ "
Интересно, стоит ли мне использоватьexecl
командачто-то вроде этого:
#include <stdio.h>
#include <unistd.h>
#include <dirent.h>
int main (void) {
return execl("/bin/export", "...", NULL);
}
Или есть ли другой идиоматический способ на языке C сделать это правильно.
решение1
Экспортировать переменные из программы в родительскую оболочку невозможно, поскольку невозможно изменить среду другого процесса.
Если вы хотите настроить дочерний процесс, см. man setenv
или man execve
.
Редактировать
Разница в том, что .bashrc
выполняется самой оболочкой, а не подпроцессом оболочки. Поскольку он выполняется оболочкой, он может изменять среду оболочки.
Единственный способ обойти это — создать команды, которые будут выполняться оболочкой:
main ()
{
printf ("PATH=/dir\n");
}
Затем в Shell выполните вывод этой команды:
$(./myenv)
Или
./myenv > /tmp/file
source /tmp/file
Но именно оболочка изменяет свою собственную среду, просто она делает это, выполняя команды, сгенерированные некоторой программой.