📜  bash tee stdout 和 stderr - Shell-Bash (1)

📅  最后修改于: 2023-12-03 14:39:27.874000             🧑  作者: Mango

Bash中使用tee命令将标准输出和标准错误输出到文件和屏幕上

在Shell编程中,当我们运行脚本时,通常会出现一些错误,这些错误信息通常会通过标准错误输出(stderr)来传递。同时,脚本的运行结果通常会通过标准输出(stdout)输出到终端上。

如果我们想要将这些输出信息保存到文件中,可以使用Linux中的 tee命令。

命令格式

tee命令的基本语法如下:

command | tee [ -a ] file

参数说明:

  • command:需要执行的命令,可以是任意的Shell命令。
  • -a:表示在文件中追加输出内容。
  • file:需要保存输出信息的文件名。
示例
#!/bin/bash

echo "This is stdout"  # 标准输出

echo "This is stderr" >&2 # 标准错误输出

# 将标准输出和标准错误输出保存到文件中
{ echo "Begin:" && ./command 2>&1 ; } | tee output.log

在上面的示例中,我们将标准输出和标准错误输出同时保存到了output.log文件中。其中2>&1表示将标准错误输出转移到标准输出上,即输出到同一个管道中。

如果我们希望每次运行脚本时向日志文件追加输出,我们可以使用-a选项。例如:

#!/bin/bash

echo "This is stdout"  # 标准输出

echo "This is stderr" >&2 # 标准错误输出

# 每次运行时向日志文件output.log追加输出
{ echo "Begin:" && ./command 2>&1 ; } | tee -a output.log

这时,每次运行脚本时,输出信息都会追加到output.log文件的末尾。

注意,如果你使用了-a选项,输出内容将不会覆盖文件中的旧内容。

在使用tee命令时,还可以同时输出到多个文件中:

#!/bin/bash

echo "This is stdout"  # 标准输出

echo "This is stderr" >&2 # 标准错误输出

# 将标准输出和标准错误输出同时保存到多个文件中
{ echo "Begin:" && ./command 2>&1 ; } | tee output1.log output2.log output3.log

这时,标准输出和标准错误输出都会同时保存到output1.log、output2.log、output3.log三个文件中。

总结

通过使用tee命令,可以将标准输出和标准错误输出同时输出到终端和文件中,方便我们进行日志记录和排错。同时,tee命令还可以很方便地实现多个输出文件的方式。

以上便是在Bash中使用tee命令将标准输出和标准错误输出到文件和屏幕上的实现方式。