[英]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 作业。 使用Start-Job
或使用Invoke-Command -AsJob
。
看看如何使用作业,并决定是否要花时间将它应用到 10 个 repos 上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.