目前我有一个 make 文件,它将使用 gnumake 构建我的软件,目前我将输出文本(如构建日志、警告、错误)重定向到一个文件中。但现在我认为在构建和重定向文件中的输出文本时也显示所有输出文本非常有帮助。以下是我当前的命令,
gnumake -f Build.mak 1>Logs.txt 2>>&1
是否可以在重定向文件中的输出文本时显示输出文本?
我知道这是一个旧帖子,但从未正确回答。这是其他未来观众的一个答案。您不需要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%
如果您安装 cygwin(ms windows 上的 unix 工具),您可以使用“tee”命令:gnumake -f Build.mak | 三通日志.txt
(这会将输出保存到 Logs.txt 并同时将输出显示到控制台)。
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
所以它在屏幕和日志文件上显示(第一行STDTOUT
)和STDERR
(最后一行) 。
对于批处理文件中的使用,只需像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