【发布时间】:2011-09-07 12:51:22
【问题描述】:
在我的 Cocoa 应用程序中,我尝试使用 NSTask 运行一些基本的 Git 命令。每当我运行需要权限(SSH 密钥)才能访问远程(例如git push、git pull)的命令时,它都会失败并出现以下错误:
权限被拒绝(公钥)。远端意外挂断
从终端运行相同的命令效果很好,所以我认为这可能是NSTask 没有设置将在访问 ssh 密钥过程中某处使用的环境变量的问题。我尝试像这样手动设置HOME 和USER 环境变量:
[task setEnvironment:[NSDictionary dictionaryWithObjectsAndKeys:NSHomeDirectory(), @"HOME", NSUserName(), @"USER", nil]];
但这没有任何效果。我必须在NSTask 中设置任何特定的环境变量才能使其正常工作吗?
编辑:多亏了达斯汀的提示,我在弄清楚这一点上有了进一步的了解。我使用env 命令列出了我当前会话的环境变量,我发现了这个:
SSH_AUTH_SOCK=/tmp/launch-DMQopt/Listeners
为了测试,我复制了该路径并将其设置为NSTask 的环境变量,然后再次运行代码,这次成功了!也就是说,我确信SSH_AUTH_SOCK 会针对每个会话进行更改,因此我不能只对其进行硬编码。如何动态生成/检索此变量?
【问题讨论】:
-
换一种方式试试,在命令行上使用
env -i,看看你需要添加多少才能正常工作。 -
感谢您的提示,进一步了解了,请阅读我编辑的帖子 :)
标签: objective-c cocoa git environment-variables nstask