Redirect mongo shell error to output

I have a script that seeds my database, but I want to only redirect the stderr to the user.

I'm trying this:

echo "Seeding pokemon"
mongo mongodb_1:27017/pokemon pokemon.js > /dev/null 2>&1

But I'm not getting the error output.If I remove the redirection, the error outputs to my console.

Upvotes: 1

Views: 1619

Answers (1)

Kiril
Kiril

Reputation: 998

Mongo Shell does not currently support separate output stream for errors.

Have can subscribe to SERVER-18643 to get notified once this is implemented.

Workaround suggested in the above ticket is to tag your output inside the Mongo Shell:

...
print("<STDOUT>")
print(multiline_json)
print("</STDOUT>")
print("<STDERR>")
print(multiline_json)
print("</STDERR>")
...

Then you can redirect to the correct output stream using the following script:

#!/bin/bash
COMMAND="mongo <args>"
OUTPUT=$(${COMMAND})

function STDERR {
  cat - 1>&2
}

function STDFILE {
  if [ -z "$1" ]; then
    return
  fi
  cat - >> $1
}

WRITE_ERR=0;
for line in $OUTPUT; do
  if [[ "$line" == "<STDERR>"* ]]; then
    WRITE_ERR=1
    continue
  elif [[ "$line" == "</STDERR>"* ]]; then
    WRITE_ERR=0
    continue
  fi
  if [ "$WRITE_ERR" -eq "1" ]; then
    printf "%s\n" "$line" | STDERR
  else
    printf "%s\n" "$line"
  fi
done

Upvotes: 2

Related Questions