启动命令,然后向其发送数据

时间:2013-11-03 17:24:18

标签: bash shell unix

我正在开发一个小工具,它解析一些文件,提取特定信息,然后将它存储到mongodb集合中。

它现在正在运作,但它正在做类似的事情:

#!/bin/bash

find myFolder | while read f
do
    # some things
    ...
    # and then

    echo "db.test.insert({'val': BinData(0, '$data')});" | mongo -quiet --host 127.0.0.1:36427 collectionName
done

但这里的“问题”是我每次都打开/关闭mongodb连接 所以这是一个问题:

有没有办法启动mongodb连接,然后在其中发生一些数据。

我知道下面的代码是完全错误的,但它只是给你一个我正在寻找的功能的例子:

#!/bin/bash

mongoConn=`mongo 127.0.0.1:36427 collectionName`

find myFolder | while read f
    # ...

    echo "db.test.insert(..);" > mongoConn
done

echo "exit;" > mongoConn

2 个答案:

答案 0 :(得分:2)

以下假设您可以向mongo工具写入多个命令。

以stdout打开mongo命令的管道。之后,您可以编写命令。

exec > >(mongo ...)
find ... | while read ... ; do
  echo "db.test.insert(...);"
done

答案 1 :(得分:0)

您可以尝试以下方式:

#!/bin/bash

deleteTmpFile(){
    [[ -f insert.tmp ]] && rm -rf $1
}

tmpFile="insert.tmp"
deleteTmpFile $tmpFile

find ... | while read f
do
    #...
    echo "db.test.insert({'val': BinData(0, '$data')});" >> $tmpFile
done

cat insert.tmp|mongo -quiet --host 127.0.0.1:36427 collectionName
deleteTmpFile $tmpFile