Reemplazos para ampersand y double-ampersand en PowerShell


28

En el procesador CMD nativo de Windows, puede usar &para encadenar comandos para que uno se ejecute inmediatamente después del otro. A &&ejecutará el segundo comando solo si el primero se completa sin error.

Esto es diferente de los comandos de tubería junto con |que la salida del primer comando no se envía al segundo comando, los comandos simplemente se ejecutan uno tras otro y la salida de cada uno se envía a su lugar habitual.

Sin embargo, recibo un error cuando intento usar &o &&en PowerShell. ¿Hay funciones similares disponibles en PowerShell o esta característica está en desuso?



Una cuestión interesante es si metaprogramming de PowerShell se podría utilizar para proporcionar esta funcionalidad utilizando&&
soandos

Respuestas:


35

El &operador en PowerShell es solo el ;o Semicolon.

El &&operador en PowerShell debe ejecutarse como una ifdeclaración.

Command ; if($?) {Command}


1

Pruebe esta función, que puede usarse aproximadamente de la misma manera:

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

Ahora &&puede ser reemplazado por ; aa, que si bien aún no es perfecto, es mucho más sucinto.

cls && build

se convierte

cls; aa build

1
¿Alguna razón no estilística por la que estás usando args[0]y no function aa ($cmd)?
ruffin

Esta es una manera frágil de invocar comandos; use bloques de script para pasar comandos e invoque aquellos con ., no &, porque este último crea un ámbito secundario para las variables.
mklement0
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.