我正在开发一个迷你shell,我正在尝试动态设置执行路径。
我使用setvar()来设置PATH,当我用getvar()检查它时,它会读取新的PATH。
以下是我试图执行的两件事:
1.我将PATH
更改为/bin
,我知道其中包含大多数系统功能,但没有程序可以正常工作。我还可以验证路径是否已在环境中设置。我使用execvp()
执行命令
2.然后我使用extern char** environ
来获取环境并将其传递到execvpe()
但它仍然不起作用。
答案 0 :(得分:0)
我通过使用istringstream
手动搜索PATH然后使用它来执行该过程来解决这个问题:
string dir;
string path = get_var("PATH");
istringstream search(path);
while(search.good()) {
getline(search, dir, ':');
if(dir != "") {
struct stat st;
if(dir[dir.length()] != '/') dir.append("/");
string file = dir + cmdArg[0];
//is file in dir?
if(stat(file.c_str(), &st) == 0) {
execvp(file.c_str(), cmdArg);
}
}
}