mongodb - 如何在 MongoDB shell 中从与脚本相同的目录加载文件
问题描述
我正在运行一个在 Mongo shell 中执行 javascript 文件的 bash 脚本:
外部脚本.sh
SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"
LOGDIR=~/logs
LOGFILE=$LOGDIR/outerscript.log
mongo < $SCRIPTPATH/jsscript.js >> $LOGFILE 2>&1
jsscript.js
load(myVars.js);
MongoDB是v4.0.19
该脚本可以在本地或远程服务器上运行,它可以从命令行或 cron 作业运行,我想加载 myVars.js,它始终与 outerscript.sh 位于同一文件夹中。
从 cron 作业运行 outerscript.sh 时,我找不到加载 myVars.js 的方法。
pwd() 返回用户的主目录,而不是当前运行脚本的位置,因此这不适用于 cron 作业:
load(pwd() + '/myVars.js');
这也不适用于 cron 工作,我猜出于同样的原因:
load('./myVars.js');
或者,是否有另一种方法可以将变量传递到我的 JavaScript 文件中,仍然可以让我将输出记录到日志文件中?据我所知,您不能将 --eval 与日志输出结合到文件中,而且我还没有找到直接从 JS 文件内部读取环境变量的方法。
谢谢!
解决方案
您不需要重定向,请尝试mongo $SCRIPTPATH/jsscript.js >> $LOGFILE 2>&1
看
$ mongo --help
MongoDB shell version v4.4.1
usage: mongo [options] [db address] [file names (ending in .js)]
db address can be:
foo foo database on local machine
192.168.0.5/foo foo database on 192.168.0.5 machine
192.168.0.5:9999/foo foo database on 192.168.0.5 machine on port 9999
mongodb://192.168.0.5:9999/foo connection string URI can also be used
您可以在 js 脚本中使用cat()。
例如
echo '{"path": "some folder"}' > /tmp/foldername.js
然后在你的 js 脚本中:
var txt = cat("/tmp/foldername.js")
var folderObj = JSON.parse(txt)
然后你可以folderObj
在你的脚本中使用对象。
你为什么不简单地使用SCRIPTPATH="$(dirname "$0")"
?
推荐阅读
- r - 如何使用任意一组标准对数据进行子集化或过滤?
- php - 如何使用 Guzzle 发布包含文件字段的 json 数据?
- stripe-payments - 我想在 symfony 应用程序中使用 Stripe Prebuilt Checkout Page 构建一个简单的结帐页面
- redis - Redis 订阅频道(应该启用键空间通知??)
- python - 使用 Python 的网络扫描仪
- unity3d - 如何在 Unity 中制作 2d Sprite 3d
- ssis - 在 SSIS ETL 的每一行中添加来自不同源的列
- ios - iOS:以编程方式创建的 UINavigationController 的导航栏未扩展到安全区域
- java - 个人电脑无法访问maven Central
- python-3.x - Pandas:将纳秒时间增量与时间戳相加