在Unix shell中,你可以这样写:
( cmd1 ; cmd2 ) | cmd3
Run Code Online (Sandbox Code Playgroud)
在Windows Batch中,您可以编写此代码
( cmd1 & cmd2 ) | cmd3
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,cmd1和cmd2的输出都传递给stdin上的cmd3.
是否有可能在Powershell中做同样的事情?
我还没有找到允许这种情况的有效语法.我希望语句块可以像这样工作,但它没有:
{ cmd1 ; cmd2 } | cmd3
Run Code Online (Sandbox Code Playgroud)
我可以通过声明一个函数来使它工作:
function f() {
cmd1
cmd2
}
f | cmd3
Run Code Online (Sandbox Code Playgroud)
是否有一种语法可以让它在线完成?
Vae*_*lus 11
您可以直接调用 powershell 来生成真正的子 shell(即外壳的状态不会被子 shell 修改):
pwsh -Command { cmd1 ; cmd2 } | cmd3
Run Code Online (Sandbox Code Playgroud)
由于 powershell 采用对象而不仅仅是字符串作为输入,因此-Command参数可以采用脚本块。请注意,如果您尝试写入不成功、名义错误流(例如使用Write-Host. 如果您遇到这些问题,我发现最简单的方法是使用保存所有相关状态的函数来模拟子 shell,使用 or 执行其参数Invoke-Command,&然后恢复状态。
| 归档时间: |
|
| 查看次数: |
2508 次 |
| 最近记录: |