Переменная среды execle () не работает - PullRequest
0 голосов
/ 26 апреля 2020

Я начинаю изучать операционные системы, я пытался использовать системный вызов execle () в C, у меня есть переменная окружения DIR, которую я установил в / home, используя массив среды, подобный этому

char* path = "/bin/ls";
char* myargs[4] = {"ls", "-la", "/home", NULL};
char *const env[] = {"DIR=/home", NULL};
execle(path, myargs[0], myargs[1], "$DIR", NULL, env);

Но когда я компилирую и запускаю это, я получаю следующий вывод ls: cannot access '$DIR': No such file or directory

Однако, это, кажется, работает просто отлично execle("/bin/bash", "/bin/bash", "-c", "echo $DIR", NULL, env);

Есть ли что-то, что я неправильно понимаю в execle звоните

1 Ответ

1 голос
/ 26 апреля 2020

Семейство функций exec*e не расширяет сами переменные среды, они просто передают среду новой программе для ее вызовов getenv.

Вызов

execle("/bin/bash", "/bin/bash", "-c", "echo $DIR", NULL, env);

работает, потому что оболочка, которую вы вызываете, выполняет расширение переменной окружения $DIR, она не раскрывается вашей программой или функцией execle.

...