阻止 PowerShell "boxing" 程序输出
Prevent PowerShell from "boxing" program output
我正在尝试 运行 PowerShell 中的以下命令:
git log --cherry-pick master...branch --format=%h | git cherry-pick -n --stdin
git log
生成一个以换行符分隔的提交哈希列表,然后我想将其传递给 git cherry-pick
。然而,git cherry-pick
总是抱怨:
'atal: bad revision '12abcdef
其中 12abcdef
是 git log
返回的第一行。请注意,上面 不是 错字 - 输出确实像那样被破坏了。
问题似乎是 PowerShell 正在将 git log
输出转换为字符串数组,然后尝试将其通过管道传递给 git cherry-pick
,这很糟糕,因为它不知道 PS 对象;它只需要来自标准输入的原始文本。我猜这与我在上面看到的损坏的输出有关,但我不确定。
如果我通过 cmd.exe
或 git bash
运行 相同的命令,一切都按预期工作。我在 git log
输出上尝试了各种 PS 命令,试图让它保持原始状态(join
、out-string
等),但没有任何效果。
那么,有没有办法告诉 PowerShell 单独保留 stdout(即让它成为 "raw"),或者我做错了什么,或者我应该做的是 PowerShell-y 方式这会给我想要的结果吗?
假设 git log --cherry-pick
像我预期的那样工作,最类似于 PowerShell 的方法可能是这样的:
foreach ($cherry in $(git log --cherry-pick master...branch --format=%h)) {
git cherry-pick -n $cherry
}
或者像这样:
git log --cherry-pick master...branch --format=%h | ForEach-Object {
git cherry-pick -n $_
}
或者如果您必须简洁:
git log --cherry-pick master...branch --format=%h | % { git cherry-pick -n $_ }
我怀疑是否有一种方法可以使用非常干净的管道来完成此操作,因为 Unix 管道是字符流,而 PowerShell 管道是对象。您将无法更改 PowerShell 中管道运算符的工作方式。
我正在尝试 运行 PowerShell 中的以下命令:
git log --cherry-pick master...branch --format=%h | git cherry-pick -n --stdin
git log
生成一个以换行符分隔的提交哈希列表,然后我想将其传递给 git cherry-pick
。然而,git cherry-pick
总是抱怨:
'atal: bad revision '12abcdef
其中 12abcdef
是 git log
返回的第一行。请注意,上面 不是 错字 - 输出确实像那样被破坏了。
问题似乎是 PowerShell 正在将 git log
输出转换为字符串数组,然后尝试将其通过管道传递给 git cherry-pick
,这很糟糕,因为它不知道 PS 对象;它只需要来自标准输入的原始文本。我猜这与我在上面看到的损坏的输出有关,但我不确定。
如果我通过 cmd.exe
或 git bash
运行 相同的命令,一切都按预期工作。我在 git log
输出上尝试了各种 PS 命令,试图让它保持原始状态(join
、out-string
等),但没有任何效果。
那么,有没有办法告诉 PowerShell 单独保留 stdout(即让它成为 "raw"),或者我做错了什么,或者我应该做的是 PowerShell-y 方式这会给我想要的结果吗?
假设 git log --cherry-pick
像我预期的那样工作,最类似于 PowerShell 的方法可能是这样的:
foreach ($cherry in $(git log --cherry-pick master...branch --format=%h)) {
git cherry-pick -n $cherry
}
或者像这样:
git log --cherry-pick master...branch --format=%h | ForEach-Object {
git cherry-pick -n $_
}
或者如果您必须简洁:
git log --cherry-pick master...branch --format=%h | % { git cherry-pick -n $_ }
我怀疑是否有一种方法可以使用非常干净的管道来完成此操作,因为 Unix 管道是字符流,而 PowerShell 管道是对象。您将无法更改 PowerShell 中管道运算符的工作方式。