c-为什么PWD变量指向文件中的主目录



我有一个头文件,其中有一个函数load_files((,它应该将特定文件从项目目录复制到用户计算机中的某个路径中。问题是我找不到我项目目录中的文件,我甚至找不到项目目录。这是我的密码。

void load_database_files(const char * prog_dir) {
char cmd[100];
const char * proj_path = getenv("PWD");
sprintf(cmd, "cp -r %s%s %s", proj_path, "/src/database/warehouse.db", prog_dir);
system(cmd);
exit(1);
}

我希望PWD指向项目目录,从那里我可以找到文件,但它返回$HOME的路径。我该如何解决这个问题?我使用的是gnome生成器IDE。如果我需要提供任何其他相关信息,请告诉我。

阅读shell文档。PWD是一个环境变量,shell在其中存储其当前目录的路径。因此,如果您在家(假设它是/home/user1(并且chdir为$HOME/projects/project_a,那么shell将把/home/user1/projects/project_a存储在变量PWD中。shell总是在执行内部shell命令cd时更新此变量,因此您有两个备选方案:

  • 请为项目目录使用不同的变量名。假设您的项目名为babilony,它位于$HOME/projects中。一个好的名称是使用一个类似BABILONY_HOME的环境变量,并在.profile中用类似
export BABILONY_HOME="$HOME/projects/babilony"

然后使用以下安全性:

void load_database_files(const char * prog_dir) {
char cmd[100];
const char * proj_path = getenv("BABILONY_HOME"); /* this will point to your project's base directory */
sprintf(cmd, "cp -r %s%s %s", proj_path, "/src/database/warehouse.db", prog_dir);
/* this would expand to 'cp -r /home/user1/projects/babilony/src/database/warehouse.db <prog_dir>' */
system(cmd);
exit(1);
}

但不要使用PWD变量,因为每次在文件系统上移动时它都会发生变化。

相关内容

最新更新