首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么PWD变量指向文件中的主目录?

为什么PWD变量指向文件中的主目录?
EN

Stack Overflow用户
提问于 2020-12-10 22:34:56
回答 1查看 47关注 0票数 0

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

代码语言:javascript
复制
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-builder IDE。如果有任何其他相关信息我需要提供,请让我知道。

EN

回答 1

Stack Overflow用户

发布于 2020-12-12 06:03:29

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

  • 为您的项目目录使用不同的变量名。假设您的项目名为babilony,它位于$HOME/projects中。好的名称应该是使用像BABILONY_HOME这样的环境变量,并在.profile中使用像

这样的行对其进行初始化

代码语言:javascript
复制
export BABILONY_HOME="$HOME/projects/babilony"

然后使用以下安全措施:

代码语言:javascript
复制
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变量,因为每次在文件系统上移动时它都会改变。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65236552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档