4

目前我有一个 make 文件,它将使用 gnumake 构建我的软件,目前我将输出文本(如构建日志、警告、错误)重定向到一个文件中。但现在我认为在构建和重定向文件中的输出文本时也显示所有输出文本非常有帮助。以下是我当前的命令,

gnumake -f Build.mak  1>Logs.txt 2>>&1

是否可以在重定向文件中的输出文本时显示输出文本?

4

4 回答 4

4

我知道这是一个旧帖子,但从未正确回答。这是其他未来观众的一个答案。您不需要tee能够记录文件并显示文本。还有另一种方法。

StackOverflow 上回答了这个问题。这是2个链接:

如果您不想使用,tee请检查:在命令行中将 TextLog 添加到 Echo 时,输入不会显示

tee你可以看到:Displaying Windows command prompt output and redirecting it to a file

只是要把答案扔在这里。

在 dos 中,您可以在不使用 tee 的情况下使用它。

set LogFile=path\logfile.txt
set TempLog=path\temp
set logg=^> %TempLog%^&^& type %TempLog%^&^&type %TempLog%^>^>%LogFile%

如果您需要创建目录或/和 logfile.txt,请执行此操作。

if not exist "path" mkdir "path" >>nul
echo. 2>  %LogFile%  >nul
echo. 2>  %TempLog%  >nul

现在只需echo像这样使用:

echo This will show me a text and logg  %logg%
于 2014-01-12T22:03:23.543 回答
2

如果您安装 cygwin(ms windows 上的 unix 工具),您可以使用“tee”命令:gnumake -f Build.mak | 三通日志.txt

(这会将输出保存到 Logs.txt 并同时将输出显示到控制台)。

于 2011-09-08T00:30:14.567 回答
0

看看这个 SOq:

基本上,您可以tee从这里使用命令,例如:

于 2011-09-08T00:30:08.020 回答
0

Avrumi Sherman的增强版,可处理STDERR STDOUT

D:\>dir ERROR 1>log.txt 2>&1 & type log.txt
 Datenträger in Laufwerk D: ist DATA
 Volumeseriennummer: 4653-A096

 Verzeichnis von D:\Projekte\UDG_TMP\build-deploy

 Datei nicht gefunden

所以它在屏幕和日志文件上显示(第一STDTOUTSTDERR(最后一行) 。

对于批处理文件中的使用,只需像Avrumi Sherman一样执行此操作,但也使用单个 &来捕获ERROR -cases:

D:\>set logFile=log.txt
D:\>set tmpLog=tmp.txt
D:\>set logCmd=1^>%tmpLog% 2^>^&1 ^& type %tmpLog% ^& type %tmpLog%^>^>%logFile%

现在您可以logCmd像 logCmd 一样使用变量;)

dir请注意,第一个和第二个的错误消息rmdir显示在屏幕上以及出现在日志文件中:

D:\>echo START %logCmd%
START

D:\>dir DIRECTORY %logCmd%
 Datenträger in Laufwerk D: ist DATA
 Volumeseriennummer: 4653-A096

 Verzeichnis von D:\

Datei nicht gefunden

D:\>mkdir DIRECTORY %logCmd%

D:\>dir DIRECTORY %logCmd%
 Datenträger in Laufwerk D: ist DATA
 Volumeseriennummer: 4653-A096

 Verzeichnis von D:\DIRECTORY

26.08.2020  17:50    <DIR>          .
26.08.2020  17:50    <DIR>          ..
               0 Datei(en),              0 Bytes
               2 Verzeichnis(se), 68.391.989.248 Bytes frei

D:\>rmdir DIRECTORY %logCmd%

D:\>rmdir DIRECTORY %logCmd%
Das System kann die angegebene Datei nicht finden.

D:\>echo STOP %logCmd%
STOP

在批处理文件的末尾,您可以/应该删除%tmpLog%. 这里%logFile%使用上面例子的内容:

START
 Datenträger in Laufwerk D: ist DATA
 Volumeseriennummer: 4653-A096

 Verzeichnis von D:\

Datei nicht gefunden
 Datenträger in Laufwerk D: ist DATA
 Volumeseriennummer: 4653-A096

 Verzeichnis von D:\DIRECTORY

26.08.2020  17:50    <DIR>          .
26.08.2020  17:50    <DIR>          ..
               0 Datei(en),              0 Bytes
               2 Verzeichnis(se), 68.391.989.248 Bytes frei
Das System kann die angegebene Datei nicht finden.
STOP
于 2020-08-26T16:07:33.157 回答