Итерация по строкам файла и экспорт переменных в env - PullRequest
0 голосов
/ 02 февраля 2019

Я на самом деле пытаюсь перебрать файл и экспортировать все переменные из него для текущего дочернего процесса, который предназначен для текущей программы на c, поэтому я думаю, что экспорт может делать то, что я хочу, но проблема в том, что мне не хватает подходящего подхода.Можете ли вы помочь, пожалуйста?

https://del.dog/adoduyegig.cc:

void parse_file(char* filename) {
    regex_t reg;
    FILE* file;
    char line[20];
    char buf[250];
    int regs=regcomp(&reg,"([^#]+)(\s*)([a-zA-Z0-9_-]+)=([a-zA-Z0-9_-]+).*", REG_EXTENDED);

    if(!filename)
        filename="a.sh";

    if(!(file=fopen(filename,"r")))
        printf("Can't locate %s",filename);

    while(fgets(line, sizeof(line), file)) {
        if(!(regs=regexec(&reg, line, 0, NULL, 0))) {
            sprintf(buf, "export %s",line);
            system(buf);
        }
    }
    regfree(&reg);
    fclose(file);
}

1 Ответ

0 голосов
/ 02 февраля 2019

Чтобы передать переменные окружения дочернему процессу, вы можете

  • создать envp вектор char *, чтобы передать его int execvpe(const char *file, char *const argv[],char *const envp[]); или эквивалентную функцию, каждая запись ввектор, имеющий форму "a = b"
  • или если для текущей программы не является проблемой установить среду, используя int setenv(const char *name, const char *value, int overwrite); для всех необходимых переменных, то создайте ваш дочерний процесс
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...