gpt4 book ai didi

Linux shell 输出命令到文件

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:51:10 25 4
gpt4 key购买 nike

我运行了一个 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

最佳答案

可能是因为 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 实际上没有生成任何输出,但我假设您已经检查过这 :-)

关于Linux shell 输出命令到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41389936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com