Substituições para e comercial e duplo e comercial no PowerShell


28

No processador CMD nativo do Windows, você pode usar &para agrupar comandos juntos para que um seja executado imediatamente após o outro. A &&executará o segundo comando somente se o primeiro for concluído sem erros.

Isso é diferente dos comandos de canalização, |pois na saída do primeiro comando não é enviado para o segundo comando, os comandos são simplesmente executados um após o outro e a saída para cada um é enviada para o local habitual.

No entanto, recebo um erro ao tentar usar &ou &&no PowerShell. Existem funções semelhantes disponíveis no PowerShell ou esse recurso está sendo preterido?



Uma questão interessante é se metaprogramming do PowerShell poderia ser usado para fornecer essa funcionalidade usando&&
soandos

Respostas:


35

O &operador no PowerShell é apenas o ;ponto-e-vírgula.

O &&operador no PowerShell deve ser executado como uma ifinstrução.

Command ; if($?) {Command}


1

Tente esta função, que pode ser usada aproximadamente da mesma maneira:

function aa() {
    if($?) {
        $command = [string]::join(' ', $args[1..99])
        & $args[0] $command
    }
}

Agora &&pode ser substituído por ; aa, o que, embora ainda não seja perfeito, é muito mais sucinto.

cls && build

torna-se

cls; aa build

1
Alguma razão não estilística para você usar args[0]e não function aa ($cmd)?
Ruffin

Esta é uma maneira frágil de chamar comandos; use blocos de script para passar comandos e invoque aqueles com ., não &, porque o último cria um escopo filho para variáveis.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.