Linux 函数内部的Shell输出重定向

Linux 函数内部的Shell输出重定向,linux,bash,function,scope,Linux,Bash,Function,Scope,调用此函数时,捕获的输出不会进入日志文件。在调用该函数之前,输出重定向工作正常。$LOG变量设置在文件的顶部。我试着附和声明,但它们不会打印出来。我猜函数会捕获输出本身吗?如果是,如何将输出推送到文件而不是控制台。(上面的wget打印到控制台,而函数内部的echo不起任何作用。)重定向在函数内部和外部的作用相同 您的问题可能是您想要一个双大于号,而不是一个大于号。例如,wget$1>>$LOG。tar命令上的重定向会截断来自wget的输出。重定向在函数内部和外部的作用相同 您的问题可能是您想要一

调用此函数时,捕获的输出不会进入日志文件。在调用该函数之前,输出重定向工作正常。$LOG变量设置在文件的顶部。我试着附和声明,但它们不会打印出来。我猜函数会捕获输出本身吗?如果是,如何将输出推送到文件而不是控制台。(上面的wget打印到控制台,而函数内部的echo不起任何作用。)

重定向在函数内部和外部的作用相同


您的问题可能是您想要一个双大于号,而不是一个大于号。例如,
wget$1>>$LOG
tar
命令上的重定向会截断来自
wget

的输出。重定向在函数内部和外部的作用相同


您的问题可能是您想要一个双大于号,而不是一个大于号。例如,
wget$1>>$LOG
tar
命令上的重定向会截断
wget

的输出,我发现了问题。是和wget在一起的。wget有一个专门用于日志记录的选项,因为我想它不能使用>(带有诅咒的东西)重定向其输出 我的工作职能是:

function grabSourceFile
{
    cd /tmp/lmpsource
    wget $1 >  $LOG
    baseName=$(basename $1)
    tar -xvf $baseName > $LOG
    cd $baseName
}

我发现了问题。是和wget在一起的。wget有一个专门用于日志记录的选项,因为我想它不能使用>(带有诅咒的东西)重定向其输出 我的工作职能是:

function grabSourceFile
{
    cd /tmp/lmpsource
    wget $1 >  $LOG
    baseName=$(basename $1)
    tar -xvf $baseName > $LOG
    cd $baseName
}

如前所述,您将向同一日志文件写入两次。您的函数正在记录“wget”的输出,然后稍后使用tar命令覆盖该输出

我自己,我喜欢在函数之外登录。这将减少日志文件被破坏的可能性。它还保持功能代码整洁

function grabSourceFile
{
        cd /tmp/lmpsource
        wget -a /tmp/lamps_install.log $1
        baseName=$(basename $1)
        tar -xvf $baseName >> $LOG
        cd $baseName
}
或者干脆做:

function grabSourceFile
{
        cd /tmp/lmpsource
        wget $1
        baseName=$(basename $1)
        tar -xvf $baseName
        cd $baseName
} >> $LOG

如前所述,您将向同一日志文件写入两次。您的函数正在记录“wget”的输出,然后稍后使用tar命令覆盖该输出

我自己,我喜欢在函数之外登录。这将减少日志文件被破坏的可能性。它还保持功能代码整洁

function grabSourceFile
{
        cd /tmp/lmpsource
        wget -a /tmp/lamps_install.log $1
        baseName=$(basename $1)
        tar -xvf $baseName >> $LOG
        cd $baseName
}
或者干脆做:

function grabSourceFile
{
        cd /tmp/lmpsource
        wget $1
        baseName=$(basename $1)
        tar -xvf $baseName
        cd $baseName
} >> $LOG

为了澄清,
>
附加到文件,而
覆盖它。为了澄清,
>
附加到文件,而
覆盖它。在函数内部,它不会处理输出重定向。使用exec在STDERR/STDOUT上设置/恢复输出重定向:exec 3>&2>/tmp/error.log;剂量测定法;执行2>&3
wget$1>$LOG
将标准输出重定向到文件中。如果您试图捕获stderr,请使用
wget$12>$LOG
,或者要捕获两者,
wget$1>$LOG 2>&1
。如果使用得当,stdout将包含“真实”数据(在
wget
的情况下,下载的数据),而stderr将包含错误和状态消息。我不会在函数内部处理输出重定向。使用exec在STDERR/STDOUT上设置/恢复输出重定向:exec 3>&2>/tmp/error.log;剂量测定法;执行2>&3
wget$1>$LOG
将标准输出重定向到文件中。如果您试图捕获stderr,请使用
wget$12>$LOG
,或者要捕获两者,
wget$1>$LOG 2>&1
。如果使用得当,stdout将包含“真实”数据(在
wget
案例中,是下载的数据),而stderr将包含错误和状态消息。我认为您关于
wget的原因是正确的http://www.example.org >tmp/wget.log
不起作用(对我也不起作用。我正在处理类似的问题)。还要注意,在第一个命令中,您使用了'tar-xvf$baseName>$LOG
,这将覆盖$LOG。您的第二次迭代执行了附加到$LOG的
>$LOG`。我认为您关于为什么
wget是正确的http://www.example.org >tmp/wget.log
不起作用(对我也不起作用。我正在处理类似的问题)。还要注意,在第一个命令中,您使用了'tar-xvf$baseName>$LOG
,这将覆盖$LOG。您的第二次迭代执行附加到$LOG的
>>$LOG`。