【发布时间】:2020-04-25 20:33:33
【问题描述】:
编辑
存在的目录不一定是主目录的子目录。它可以是主目录的子目录的子目录。
编辑结束
我正在读取用户输入(例如,cd existsDirectory)以将当前目录更改为“existedDirectory”。我知道
chdir(getenv("HOME"));
可以将当前目录改为主目录,所以我尝试了以下方法:
chdir(getenv("/existedDirectory"));
chdir(getenv("existedDirectory"));
chdir(getenv("~/existedDirectory"));
chdir("/existedDirectory");
chdir("existedDirectory");
chdir("~/existedDirectory");
没有任何效果。任何帮助将不胜感激。
【问题讨论】:
-
如果目录存在,您尝试的第 4 和第 5 件事将起作用。其他人没有。
-
您首先需要了解
getenv的作用。 -
HOME是一个环境变量,getenv("HOME")获取它的值,它是一个代表您的主目录的字符串。"/existedDirectory"之类的东西已经是一个目录名称。它不是环境变量。因此,拨打getenv("/existedDirectory")是没有意义的。 -
chdir更改执行它的进程的工作目录,并且不影响父 shell 进程。如果这不是您的问题,请显示minimal reproducible example。 -
感谢您的所有 cmets。现在我明白要使用
getenv()我需要一个完整路径,就像HOME而不是目录的名称。 (如果我误解了这个概念,请告诉我。)不幸的是,当我使用getcwd打印当前目录时,第 4 和第 5 不起作用。有什么想法吗?