将脚本的所有输出捕获到文件(从脚本本身)

将脚本的所有输出捕获到文件(从脚本本身)

我有一个 bash 脚本,它调用各种命令并打印一些输出(都来自被调用的命令本身,例如git pull,以及脚本本身生成的信息性消息,例如Operation took XX minutes.

我想将整个输出捕获到文件中从脚本本身:基本上我是想避免打电话的./myscript.sh | tee file.txt需要此处不相关原因。

基本上我想做这样的事情:

startCapture

git pull

echo "Text"

other-command

endCapture

我还要求在脚本运行时将输出打印在我的 shell 上。

最终目标是:

  1. ./myscript.sh无需额外的 shell 结构即可运行
  2. 像我现在一样查看终端上的输出
  3. 获取磁盘上包含整个输出的文件

这可能吗?

答案1

您始终可以script在脚本内部调用来记录所有内容。

至于在 bash 脚本中同时打印和记录所有内容log.txt

#!/bin/bash

if [ -z "$SCRIPT" ]
then 
    /usr/bin/script log.txt /bin/bash -c "$0 $*"
    exit 0
fi

echo teste

查看日志log.txt

$ ./a.sh
Script started, output file is log.txt
teste

Script done, output file is log.txt
$ cat log.txt
Script started on Fri Feb 16 17:57:26 2018
command: /bin/bash -c ./a.sh 
teste

Script done on Fri Feb 16 17:57:26 2018

答案2

我发现捕获任何会话的所有输出的方法是启动一个新的 bash 会话并发送到日志文件。它对于跟踪不仅仅是一个脚本确实很有用。

bash | tee ~/bash.log #这将保存标准输出,直到 bash 会话结束
bash 2>&1 | bash 2>&1 | tee ~/bash.log #这将保存所有输出,包括错误,直到 bash 会话结束

或者你可以直接编写脚本

./myscript.sh | tee ./myscript.log #this will log only the output of the script.

答案3

你想使用球座

前任:

echo "Hello World" | tee out.txt

这将使用命令的输出创建一个文件 out.txt 并将其打印到屏幕上。如果要附加到文件,请使用“tee -a 文件名”。

echo "Hello" | tee -a out.txt
echo "World" | tee -a out.txt

out.txt 将有两行 Hello 和 World (没有 -a 则只有 world)

如果要保存整个脚本并输出整个脚本:

./script.sh | tee output.txt

相关内容