如何在OSX上通过VBA使我的“终端”命令在正确的文件夹中运行?

3
我有一个Excel文件(Excel 2011,运行在OSX 10.9.4上),将其数据导出到文本文件中。我希望一旦导出完成,就自动将此文本文件上传到Git。
我使用了这篇文章中描述的execShell函数: VBA Shell function in Office 2011 for Mac 它能为我执行的命令提供良好的输出。
我想进入我的文件夹(新文件所在的位置),然后从那里调用我的git commit命令(“git add *”,“git commit -m commitmessage”和“git push”)。但问题是我不能进入我的文件夹。如果我尝试cd /Users/username/folder,然后pwd,我会不断地收到“/”作为位置的回复(无法从那里调用我的git命令)。
完整的代码如下:
commitMessage = """New feature file: " & ActiveSheet.Name & """"
gotoPath = Replace(Replace(CurDir(), ":", "/"), "Macintosh HD", "") 'make a "normal" path from CurDir()
result = execShell("cd " & gotoPath, exitCode)
result = execShell("pwd", exitCode)
result = execShell("git add *", exitCode)
result = execShell("git commit -m """ & commitMessage & """", exitCode)
result = execShell("git push", exitCode)

如果我在终端中(位于正确的文件夹中)执行git命令,提交就能成功。如果我使用execShell函数执行“say”命令,也能正常工作。
有没有任何建议可以帮助我找到正确的位置?或者有其他方式可以实现这个目的吗?
1个回答

3
每次调用 execShell 都会启动一个新的 shell。该 shell 执行命令,然后退出。因此,您的新 shell 改变了目录 对于该shell 然后退出。下一个新的 shell 从上一次开始时完全相同的地方启动 - 不是因为它是一个新的、不同的进程而退出的地方。您需要在一个 shell 中完成所有操作:
execShell("cd somewhere && do something && do something else")

上述代码只有在前一个命令执行成功的情况下才会执行后续命令。如果你想无条件地执行其他命令,而不管前一个是否失败,可以使用分号来分隔命令:
execShell("cd somewhere; do something; do something else")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接