无法在 mongo shell 中设置外部编辑器。(苹果操作系统)



我想在 mongo shell 中设置一个外部编辑器,但我收到此错误。

sh: /Applications/CodeRunner.app: is a directory
editor exited with error (32256), not applying changes

正如mongodb文档所说,我在开始mongo shell之前做了以下工作。

export EDITOR='/Applications/CodeRunner.app'
echo $EDITOR
/Applications/CodeRunner.app
open $EDITOR

我确保我可以通过运行echo $EDITOR来启动编辑器"CodeRunner"。

在此之后,我输入了mongo shell并执行以下操作,但出现错误。

var obj = {}
edit obj
sh: /Applications/CodeRunner.app: is a directory
editor exited with error (32256), not applying changes

任何人都可以告诉我我做错了什么以及如何解决此错误?

您在Finder 中看到的 MacOS.app"文件"实际上是一个具有目录和文件结构的应用程序捆绑包。您可以通过在终端会话中列出带有ls -laR /Applications/CodeRunner.app的文件,或者右键单击 Finder 中的 CodeRunner.app 并从菜单中选择"查看包内容"来查看幕后情况。

实际的可执行文件可以在 Content/MacOS 目录中找到,因此 EDITOR 变量的正确设置应该是:

EDITOR="/Applications/CodeRunner.app/Contents/MacOS/CodeRunner"

但是,我使用 MongoDB 3.6.3 shell 测试了 CodeRunner 2.3,它不能像mongoshell 的编辑器那样正常工作。

mongoshell 中设置 EDITOR 变量并运行edit foo会启动 CodeRunner,其中包含一个包含foo内容的临时文件(到目前为止,一切顺利)。遗憾的是,在 CodeRunner 中保存此文件或关闭选项卡不会将控制权返回到mongoshell。我发现我必须退出 CodeRunner 应用程序才能返回编辑结果并恢复我的mongoshell 会话。

如果您的目标是在 shell 中使用 GUI 编辑器来实现 JavaScript 函数,一种方法是将 JavaScript 代码保存在文件中,并在保存在首选编辑器后使用load()命令在mongoshell 中运行它。或者,您可以使用代码编辑器查看MongoDB管理工具(有很多,开源和其他)。DbKoda就是这样一个例子,它是跨平台和开源的。

如果您需要处理数据或查询结果,但不需要任何自定义函数,我建议您使用MongoDB Compass等数据管理UI。

最新更新