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

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

例如,我有:

~/.abc.sh

 #! /bin/bash rails new myapp 

当我跑…

 cd ~/code . ~/.abc.sh 

…将在目录~/code/myapp创建一个新的Rails应用程序。

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

我该怎么做呢?

您可以使用tee命令:

 command | tee /path/to/logfile 

没有写入shell的equivelent将是:

 command > /path/to/logfile 

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

 command | tee -a /path/to/logfile 

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

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

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