[英]Odd differences in logging git commands to a Powershell Transcript
有关我试图理解的行为的完整背景,请参阅此问题。
我对Start-Transcript
的理解是,一旦启动,所有 output 流都会记录到 Powershell 记录中。 我可以写入流 1-6,但仍希望在我的脚本日志中看到 output。 但是,在我上面链接的问题中,我看到了一些我无法解释的奇怪现象,并想了解为什么 output 在这种情况下被吞下,在这种情况下,我们每个人都看到了不同的行为。
基本上,OP 试图记录git clone | Out-Default
git clone | Out-Default
到他们的成绩单日志,并且没有任何记录到成绩单。 对他们有用的解决方案是设置一个环境变量,让git
写入stdout
而不是stderr
。 OP 后来表示,他们曾尝试将git
命令传送到Out-Default
以查看它是否有所作为,但事实并非如此,因此他们的解决方案似乎是“ git
输出到 stderr 并且没有被Start-Transcript
捕获Start-Transcript
。
然而,我的经历不同。 我没有将git
配置为将stderr
重定向到stdout
,并且可以通过尝试将 git 命令的 output 分配给变量来确认这一点(这不是预期的)。 但是我可以简单地调用Start-Transcript
,然后调用git status
,然后查看它是否记录到脚本中。 但是,当我运行git status | Out-Default
git status | Out-Default
,我得到 output 到控制台,但没有登录到成绩单。 删除Out-Default
似乎是我的解决方案,但不是 OP。
我不知道这里发生了什么。 在我的系统上,似乎将git
命令和仅git
命令传递到Out-Default
不允许将 output 记录到成绩单。 我已经用他们的stderr
output 测试了其他外部程序,并将 output 输送到Out-Default
仍然允许 output 被转录。 但不是git blah | Out-Default
git blah | Out-Default
。 而且我仍然不明白为什么其他问题的 OP 需要将stderr
重定向到stdout
,但我不明白。
您会看到在以下情况下出现的错误:
正在进行转录(以Start-Transcript
)
正在调用外部程序(例如git
),并且它(也)输出到stderr (标准错误流)。
外部程序调用通过管道传送到Out-Default
。
然后,stderr output 意外地没有记录在成绩单中。 [1]
此问题已在此 GitHub 问题中报告,但请务必注意:
在这种情况下没有理由调用Out-Default
,因为默认情况下,脚本会记录来自外部程序的 stdout 和 stderr output。
通常没有理由从用户代码中调用Out-Default
; 它被设计为由 PowerShell 主机应用程序调用。
有关更多信息,请参阅此答案。
[1] Note that stderr output from external programs is generally treated differently than error output from PowerShell commands: unless redirected, stderr lines are printed to the display by default, without touching PowerShell's error stream (and therefore also without being recorded in $Error
) ,因为通常不能假定 stderr 代表错误,因为许多程序(包括git
)也使用它来写入状态信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.