如何将输出重定向到屏幕和文件?

如何将输出重定向到屏幕和文件?

我的目标是将脚本的所有输出记录到脚本将要创建的目录中。

例如,我有:

~/.abc.sh

#! /bin/bash
rails new myapp

当我跑步时...

cd ~/code
. ~/.abc.sh

...这将在目录中创建一个新的 Rails 应用程序~/code/myapp

当 Rails 创建应用程序时,它会输出一大堆文本,我想捕获这些文本并将其存储在rails新创建的命令所在目录中的日志文件中。我还想在终端中显示这些文本。

我该如何做呢?

答案1

您可以使用tee以下命令:

command | tee /path/to/logfile

不写入 shell 的等效操作如下:

command > /path/to/logfile

如果您想要附加 ( >>) 并在 shell 中显示输出,请使用以下-a选项:

command | tee -a /path/to/logfile

请注意,管道只会捕获 stdout,管道不会处理 stderr 中的错误tee。如果要记录错误(来自 stderr),请使用:

command 2>&1 | tee /path/to/logfile

这意味着:运行command并将 stderr 流 (2) 重定向到 stdout (1)。它将通过应用程序传递到管道tee

答案2

script将启动一个交互式会话并将所有输出(stdout/stderr 等)记录到文件中,或者(使用参数-c)运行一个命令并记录该命令的输出。

script -c ~/.abc.sh -f abc.log

注意:在交互式会话中,您可以像平常一样退出会话(例如exitCtrl-D)来停止录制。

对于带有视频播放的会话录制,您还可以尝试海胆属

相关内容