如何在终端中更改目录?

时间:2019-11-27 15:05:26

标签: objective-c

我有以下代码:

NSString *currentpath;

NSFileManager *filemgr = [NSFileManager defaultManager];
[filemgr changeCurrentDirectoryPath:@"/Users/BestUser/Downloads"];


currentpath = [filemgr currentDirectoryPath];
NSLog (@"Current directory is %@", currentpath);

当我在终端中运行它时,它记录该路径已更改为目录Downloads。

但是我在终端中的当前目录不会更改。

是否可以通过Objective-C在终端中更改目录?

3 个答案:

答案 0 :(得分:2)

每个进程都有自己的> python3 test.py [1, 1, 0, 1] > ,即working directory环境变量。当您在当前Shell会话中执行类似PWD的命令时,它将启动另一个./ChangeDirectory,该命令是该命令的进程,并非所有环境变量都将初始化为{ {1}}会话,subshell就是那个会话。

在子shell中更改当前工作目录/ subshell变量时,新变量不会影响父进程的环境。这使您的不变

答案 1 :(得分:0)

有两种不同的方法可能阻止它按照您的描述进行工作。

首先,-[NSFileManager changeCurrentDirectoryPath:]可能返回NO,表明它无法根据请求更改当前目录。之所以会发生这种情况,是因为该路径不存在或无法访问-并且在macOS 10.15 Catalina上,作为安全措施,脚本可能无法访问某些路径(如“下载”)。您的代码应检查该方法的返回值并处理错误情况。

第二,即使您没有运行Catalina或选择一个 可访问的文件夹,在shell中运行编译的程序也不会更改该shell中的当前目录。 bash和类似Shell上的行为是故意的,如several other questions中所述-您的呼叫更改了进程的工作目录,但所做的更改确实不会传播到父进程。 (此处链接的最后一个问题描述了解决此问题的方法,但作者建议不要使用该策略。)

答案 2 :(得分:0)

您的代码将更改当前目录以供其使用。同样,即使您在终端中更改当前目录,该更改也仅对一个终端会话有效。

目标是什么?您是否要在系统启动时设置当前目录?还是您正在尝试将文件存储到特定目录?有很多方法可以实现这一目标,但是您必须详细说明自己的要求。