2017-02-14 14 views
1

私は10 git reposというディレクトリを持っています。 私は、単一のコマンドでは、並行して、それらのすべてのgit pullを行うしたいと思います:Powershell - 複数のバックグラウンドコマンドを実行するためのエイリアス

gpa // git-pull-all 

これは実際には次の手順を実行しなければならない:

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

これはbash(UNIXの場合は非常に簡単でなければなりません)。 PowerShellでは、私はそれが非常に複雑であることがわかります。 どうすれば適切に行うことができますか?

+0

'PS C:\> help about_Jobs' –

答えて

1

これはエイリアス(PowerShellの用語集)ではなく、関数またはスクリプトにすぎません。

ほとんどの場合、関連するアナログはPowerShellで見つかります。

したがってlsは実際にはGet-ChildItemのエイリアスで、PowerShell v3 +では-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 Jobsを使用できます。 Start-JobまたはInvoke-Command -AsJobを使用してください。

    ジョブを使用する方法を見て、わずか10レポでジョブを適用する時間を費やしたいかどうかを判断してください。

  • 関連する問題