繁体   English   中英

将 git 命令记录到 Powershell 成绩单的奇怪差异

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM