Linux shell输出命令到文件

时间:2016-12-30 02:43:36

标签: linux bash

我运行一个shell脚本但是没有将输出输出到我的文件,只有日期回显到.log文件的第一行。谁能解释为什么mongodump命令没有附加到.log文件?

#!/bin/sh
DEST=/db_backups/
DAYOFWEEK=`date +%u`
echo "---------------------- $(date) -----------------------" >> mongo_backup_output.log
mongodump --archive=$DEST$DAYOFWEEK.gz --gzip >> mongo_backup_output.log

1 个答案:

答案 0 :(得分:5)

可能是因为mongodump的输出是标准错误,而不是标准输入(a)。如果是这样,你可以使用2>&1方法(它的位置很重要,它必须在输出重定向之后):

runSomeTask >>mongo_backup_output.log 2>&1

这个2>&1位的作用是将标准错误(文件句柄2)发送到标准输出(文件句柄1)当前所在的同一位置,有效地将标准输出和标准错误发送到同一个地方

在任何情况下,如果要捕获整个脚本的输出/错误,您应该使用exec的无参数形式。这个命令通常会将一个新程序带入进程并执行它,但如果你没有给它一个程序,它只会修改当前程序。

换句话说,比如:

#!/usr/bin/env bash

exec >>mongo_backup_output.log 2>&1

# ALL output/error will now go to that file, don't have
# to explicitly redirect every single command.

DEST="/db_backups/"
DAYOFWEEK="$(date +%u)"
echo "---------------------- $(date) -----------------------"
mongodump --archive=${DEST}${DAYOFWEEK}.gz --gzip

(a) mongodump也可能生成任何输出,但我会假设您已经检查过: - )