Как `экспортировать PATH` из C

Как `экспортировать PATH` из C

Хотите узнать, как выполнить одну из этих задач из 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

Но именно оболочка изменяет свою собственную среду, просто она делает это, выполняя команды, сгенерированные некоторой программой.

Связанный контент