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

时间:2017-02-14 21:07:50

标签: git powershell

我有一个包含10 git repos的目录。 我希望在一个命令中同时对所有这些进行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中,我发现它非常复杂。 我该怎么做呢?

1 个答案:

答案 0 :(得分:1)

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

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

因此,PowerShell中的Get-ChildItem实际上是-Directory的别名,在PowerShell v3 +中也支持foreach($thing in $things)参数仅返回目录,因此该部分几乎可以正常工作。

虽然你可以进行ForEach-Object循环,但在这种情况下,管道$repos = 'C:\repos' Get-ChildItem -Path $repos -Directory | ForEach-Object -Process { Push-Location -Path $_ git pull Pop-Location } 会更自然(PowerShell-ey),所以像这样:

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

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

Start-Job

但是我推荐第一个因为:

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

这些示例都没有处理任务的后台处理。我暂时把它排除在外,因为它不是那么类似。

为此,您可以使用PowerShell Jobs。使用Invoke-Command -AsJob或使用@YourFormula

看看如何使用工作,并决定是否要花时间将其应用于10个回购。