我有一个为我们的服务器自动重建mongo数据库的脚本:
#!/bin/sh
mongo local:host 127.0.0.1 mongodb-create-ourdatabase.js > validate.txt
mongoimport --host 127.0.0.1 --db ourdatabase --collection ourUser --file create-ourUser.js > validate.txt创建数据库时,第一行的输出将写入文件,而创建集合ourUser的第二行的输出将输出到屏幕。
我遗漏了什么?
发布于 2016-09-15 04:12:58
首先,这两个调用都创建一个空的新validate.txt文件。所以第二次调用会破坏第一次调用的结果。我怀疑这是否是您想要的,因此您应该通过>>更改第二个>以附加到您的日志文件中。
其次,可执行文件通过两个屏幕通道发出输出:标准输出(也称为stdout,用于正常输出、结果)和标准错误(又称为stderr,用于警告和错误)。通过查看输出不可能知道哪个流是目标。
要合并两个流并获取所有流程输出,您必须使用2&>1 (dup & close stderr To 1=stdout)通过管道将stderr传输到stdout,以便能够重定向
mongo local:host 127.0.0.1 mongodb-create-ourdatabase.js 2&>1 > validate.txt
mongoimport --host 127.0.0.1 --db ourdatabase --collection ourUser --file create-ourUser.js 2&>1 >> validate.txt发布于 2016-09-15 21:01:15
感谢Jean-Francois的回复,不幸的是,这没有起作用,但很接近。起作用的是:
#!/bin/sh
mongo localhost:27017 mongodb-create-our-database.js 2>&1 > validate.txt
mongoimport --host 127.0.0.1 --db ourdatabase --collection ourUser --file create-ourUser.js >> validate.txt 2>&1使用2&>1让脚本查找文件2,我找到了这个很好的解释:
这对我很有效。
https://stackoverflow.com/questions/39498816
复制相似问题