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

2

Вы не можете экспортировать переменные из программы в родительскую оболочку, потому что невозможно изменить среду другого процесса.

Если вы хотите настроить дочерний процесс, посмотрите man setenv или man execve .

редактировать

Разница в том, что .bashrc выполняется самой оболочкой, а не подпроцессом оболочки. Поскольку он выполняется оболочкой, он может изменять среду оболочки.

Единственный способ обойти это - создать команды, которые будут выполняться оболочкой:

main ()
{
    printf ("PATH=/dir\n");
}

Затем в командной консоли выполните вывод этой команды:

$(./myenv)

Или же

./myenv > /tmp/file
source /tmp/file

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .