【问题标题】:Why does PWD variable point to home directory in a file?为什么 PWD 变量指向文件中的主目录?
【发布时间】:2021-03-21 23:53:43
【问题描述】:

我有一个头文件,其中有一个函数 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-builder IDE。如果我需要提供任何其他相关信息,请告诉我。

【问题讨论】:

  • 我有一个头文件 load_files()load_files() 查看使用的样式在 CC++ 和许多编程语言中称为函数
  • 在较轻的笔记上,最好打印 cmd ,然后在 system(cmd); 中使用,以确保我们调用正确。
  • 对不起,我修好了)。是的,我可能应该这样做以进行正确的调试。
  • 您还应该使用snprintf()(并检查最终字符串是否太长而无法在cmd 中保存的情况)而不是sprintf()
  • @Shawn 是的,我打算稍后改变它。有什么想法可以解决 PWD 问题吗?

标签: c linux file path


【解决方案1】:

阅读外壳文档。 PWD 是一个环境变量,shell 在其中存储其当前目录的路径。所以,如果你在家(假设它是/home/user1)并且chdir 到$HOME/projects/project_a,shell 会将/home/user1/projects/project_a 存储在变量PWD 中。当你执行内部 shell 命令cd 时,shell 总是更新这个变量,所以你有两个 替代品:

  • 为您的项目目录使用不同的变量名。假设您的项目名为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 变量,因为每次您在文件系统上移动时它都会发生变化。

【讨论】:

    猜你喜欢
    • 2021-06-17
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多