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

Zab*_*bba 17 bash redirect

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

例如,我有:

~/.abc.sh

#! /bin/bash
rails new myapp
Run Code Online (Sandbox Code Playgroud)

当我跑...

cd ~/code
. ~/.abc.sh
Run Code Online (Sandbox Code Playgroud)

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

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

我该怎么做?

Lek*_*eyn 31

您可以使用该tee命令:

command | tee /path/to/logfile
Run Code Online (Sandbox Code Playgroud)

不写入外壳的等效项是:

command > /path/to/logfile
Run Code Online (Sandbox Code Playgroud)

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

command | tee -a /path/to/logfile
Run Code Online (Sandbox Code Playgroud)

请注意,管道将仅捕获 stdout,带有tee. 如果要记录错误(来自 stderr),请使用:

command 2>&1 | tee /path/to/logfile
Run Code Online (Sandbox Code Playgroud)

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