Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como suprimir a saída e verificar se um comando é bem-sucedido ou não?


Atualizar :
  • O if ($LASTEXITCODE -eq 0) ... continuará a funcionar de forma robusta com programas externos.
  • No entanto, se e quando a versão anterior à v7.2 recurso experimental chamado PSNotApplyErrorActionToStderr torna-se um recurso oficial, if ($?) ... também funcionará de forma robusta - veja esta resposta para mais informações.

Usar $LASTEXITCODE -eq 0 em vez de $? para detectar de forma confiável um código de saída diferente de zero (normalmente sinalizando falha) relatada por um programa externo.

Você pode então usar *> $null para suprimir categoricamente toda a saída sem ter que se preocupar com o impacto desse redirecionamento em $? :
mysql -u root --password=mypass -e "show databases" *>$null
if ($LASTEXITCODE -eq 0) {
  "Hooray!"
} else {
  "Boo!"
}

Usando um redirecionamento que envolve o fluxo de erros do PowerShell - explicitamente por meio de 2> ou implicitamente via *> - significa que, se algum dado for recebido por meio desse fluxo - o que no caso de chamar um programa externo significa qualquer saída de stderr - PowerShell define $? para $false .

No entanto, no domínio dos programas externos de console/terminal, stderr não é usado apenas para gerar erro informações, mas qualquer informação que não seja dados , como informações de status. Portanto, você não pode inferir falha da presença de saída stderr .

Programas de console/terminal externos comunicam seu status de sucesso apenas por meio de seu código de saída , que o PowerShell reflete no $LASTEXITCODE automático variável.

Segue-se do exposto que $? pode ser $false mesmo que o código de saída seja 0 , portanto, não é um indicador de sucesso confiável - ao contrário de $LASTEXITCODE .