我想在 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,它不能像mongo
shell 的编辑器那样正常工作。
在mongo
shell 中设置 EDITOR 变量并运行edit foo
会启动 CodeRunner,其中包含一个包含foo
内容的临时文件(到目前为止,一切顺利)。遗憾的是,在 CodeRunner 中保存此文件或关闭选项卡不会将控制权返回到mongo
shell。我发现我必须退出 CodeRunner 应用程序才能返回编辑结果并恢复我的mongo
shell 会话。
如果您的目标是在 shell 中使用 GUI 编辑器来实现 JavaScript 函数,一种方法是将 JavaScript 代码保存在文件中,并在保存在首选编辑器后使用load()
命令在mongo
shell 中运行它。或者,您可以使用代码编辑器查看MongoDB管理工具(有很多,开源和其他)。DbKoda就是这样一个例子,它是跨平台和开源的。
如果您需要处理数据或查询结果,但不需要任何自定义函数,我建议您使用MongoDB Compass等数据管理UI。