帮助中心

立即注册 咨询客服

当前位置:首页 > 帮助中心> 如何使用tee和script命令捕获输出和文件错误

如何使用tee和script命令捕获输出和文件错误

发布时间:2019年10月02日 11:55:21    来源: A5互联

当您编写了一个脚本来处理Linux服务器上的一个重要任务时,如果您需要该脚本的输出日志,以便记录所发生的事情,或者对运行过程中可能没有发生的事情进行故障排除,会发生什么情况?如果脚本使用特定的服务,您总是可以查看这些特定的日志文件,但这有点麻烦。如果脚本失败,这些服务日志可能没有任何帮助。

您可以使用tee或script命令。tee命令从标准输出读取数据,并将数据写入标准输出或文件,而script命令生成终端会话的typescript并可以将数据输出到文件中。对于任何经常使用bash脚本的人来说,这些命令应该被认为是必备的工具。当脚本输出大量信息时尤其如此。

我想向您介绍tee和脚本命令,以便您能够更有效地排除故障并记录bash脚本。

您需要使用tee或script的惟一工具是Linux服务器(或桌面)。缺省情况下应该安装tee和script,因此不需要安装单个包。

一、如何使用tee命令

让我们编写始终令人愉快的“ Hello World” bash脚本。该脚本将仅包含以下内容:

#!/bin/bash

echo Hello World

将该文件命名为test,并使用以下命令为其赋予可执行权限:

chmod u+x test

如果使用命令./test执行该脚本,则应该看到与图A所示类似的输出 。

您可能会问自己一个问题,“为什么不直接将脚本的输出发送到文件?” 您可以使用以下命令执行此操作:

./test> test.log

由于所有内容都已转储到文件test.log中,您将看不到任何输出返回到终端。要实时查看输出并拥有输出的日志文件,可以使用tee命令,如下所示:

./test | tee test.log

您不仅会看到Hello World打印到标准输出(图B的终端),还将有包含相同输出的test.log文件。

二、如何使用script命令

下一个工具称为script。使用script,您将获得一个交互式会话,所有这些会话均被打印到标准输出并写入文件。要在我们的Hello World示例中使用脚本,命令应为:

script -c ./test test.log

该-c选项告诉script我们正在运行的命令。script命令的输出如图C所示。

使用tee和script命令输出到文件的区别在于脚本输出将为您提供更多信息,例如退出代码(图D)。

当您拥有更复杂的bash脚本时,您将看到该命令的更多输出。例如,假设您编写了一个bash脚本,要求输入文件名,并且该文件将被删除。该bash脚本可能如下所示:

#!/bin/bash

echo "Enter filename to remove"

read fn

rm -i $fn

使用脚本命令运行该文件时:

script -c ./test test.log

系统将要求您删除文件名(图E)。删除文件后,您可以查看test.log文件以查看整个会话。

当您有一个非常复杂的bash脚本时,您将看到更多(有用)的输出写入日志文件。