繁体   English   中英

Powershell - 运行多个后台命令的别名

[英]Powershell - alias for a running a multiple background commands

我有一个包含 10 个git库的目录。 我想在一个命令中并行地对所有这些进行git pull

gpa // git-pull-all

这实际上应该执行以下操作:

cd c:\repos;
foreach $dir in `ls -d` do
    git pull & // unix version for background
    cd ..
end

这在bash (unix) 中应该很简单。 在powershell中,我发现它非常复杂。 我怎样才能正确地做到这一点?

这不会是别名(用 PowerShell 的说法),它只是一个函数或脚本。

大多数情况下,您只会在 PowerShell 中找到相关的类似物。

所以 PowerShell 中的ls实际上是Get-ChildItem的别名,它在 PowerShell v3+ 中也支持-Directory参数以仅返回目录,因此该部分几乎可以立即-Directory

尽管您可以执行foreach($thing in $things)循环,但在这种情况下,将管道输入ForEach-Object会更自然一些(PowerShell-ey),因此如下所示:

$repos = 'C:\repos'
Get-ChildItem -Path $repos -Directory | ForEach-Object -Process {
    Push-Location -Path $_
    git pull
    Pop-Location
}

作为参考,使用别名和替代语法使其看起来最像您的原始版本,可以这样做:

cd c:\repos
foreach ($dir in (ls -di)) {
    git pull
    cd ..
}

但是我推荐第一个,因为:

  • 它保留了您的原始路径
  • 它不使用别名
  • 它使用了我认为更直接的迭代方式(在 PowerShell 中)

但是,这些示例都没有处理任务的背景。 我暂时忽略了它,因为它不是类似的。

为此,您可以使用PowerShell 作业 使用Start-Job或使用Invoke-Command -AsJob

看看如何使用作业,并决定是否要花时间将它应用到 10 个 repos 上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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