代码之家  ›  专栏  ›  技术社区  ›  dgamma3

存储有错误的命令输出

  •  1
  • dgamma3  · 技术社区  · 7 年前

    我想存储这个命令的输出 git checkout master

    此命令的输出有两种状态。

    1. 成功-命令输出:

      切换到分支“X”

    2. 故障-命令输出

      签出<列表文件>将覆盖对以下文件的本地更改:请提交更改或在切换分支之前将其保存。正在中止

      1. 我想存储输出并通过检查字符串abort来检查是否成功。

        这是我试过的。

        $output=git checkout master 2>&1
        if($output.contains(“正在中止”)){
        写入主机$output-背景色红色
        }其他{
        写入主机$output
        }
        

        但是,当处于第二种状态时,>$output->products something like this,when in the second state:。

        似乎命令已完成,但语法错误。我该怎么解决这个问题?我想下车

        .

        切换到分支“X”

      2. 故障-命令输出

        签出<列表文件>将覆盖对以下文件的本地更改:请提交更改或在切换分支之前将其保存。正在中止

      我想存储输出并通过检查字符串abort来检查是否成功。

      这是我试过的。

      $output = git checkout master 2>&1
      if ($output.Contains("Aborting")) {
          Write-Host $output -BackgroundColor Red
      } else {
          Write-Host $output
      }
      

      但是 $output 当处于第二种状态时,会产生类似的结果:

      enter image description here

      似乎命令已完成,但语法错误。我该怎么解决这个问题?我想下车

    1 回复  |  直到 7 年前
        1
  •  3
  •   mklement0    7 年前

    确保将命令的stderr输出转换为常规字符串:

    $output = [string[]] (git checkout master 2>&1)
    

    没有 [string[]] 强制转换,stderr输出行存储在 $output 作为 [System.Management.Automation.ErrorRecord] 实例,稍后输出这些实例会有点误导性地打印它们,就好像它们是PowerShell错误一样。

    (注意,PowerShell 核心 不再显示此行为:当stderr行仍处于 捕获 作为 [系统.管理.自动化.错误记录] 实例,他们现在 打印 作为普通字符串。)

    推荐文章