为什么不赢得Tee写的所有输出(Bash)?

时间:2012-01-30 17:17:28

标签: bash function logging tee

我遇到了一个我不知道原因的问题。我想最简单的解释方法是通过代码示例:

test ()
{
    echo "This will be printed to the file"

    #But the output of rsync will not
    rsync -av /path/A /path/B

    echo "This will be printed to the file"
}

function_calling_test ()
{
    test | tee -a "file_B.txt"
}

function_calling_test | tee -a "file_A.txt"

在上面的示例中, file_A.txt 将包含 echo 输出和“test” rsync 输出/ strong>,但 file_B.txt 只会包含 echo 输出。这是为什么?

1 个答案:

答案 0 :(得分:1)

您需要将stderr输出添加到流

mytest ()
{
    echo "This will be printed to the file"

    #But the output of rsync will not
    rsync -av /path/A /path/B 2>&1
    # -----------------------^^^^^^

    echo "This will be printed to the file"
}

test是一个可用于所有unix shell的命令,它是unix / Linux操作系统的一部分。不要将你的功能命名为普通测试,你要为自己做好准备! ; - )

我希望这会有所帮助。