sql >> Databáze >  >> RDS >> Mysql

Jak potlačit výstup a zkontrolovat, zda je příkaz úspěšný nebo ne?

Aktualizovat :

  • if ($LASTEXITCODE -eq 0) ... přístup bude i nadále robustně fungovat s externími programy.
  • Pokud a kdy starší verze než 7.2 experimentální funkce s názvem PSNotApplyErrorActionToStderr se stává oficiální funkcí, if ($?) ... bude také fungovat robustně – viz tato odpověď pro více informací.

Použijte $LASTEXITCODE -eq 0 spíše než $? ke spolehlivé detekci nenulového výstupního kódu (obvykle signalizující selhání) hlášené externím programem.

Poté můžete použít *> $null kategoricky potlačit veškerý výstup aniž byste se museli starat o dopad tohoto přesměrování na $? :

mysql -u root --password=mypass -e "show databases" *>$null
if ($LASTEXITCODE -eq 0) {
  "Hooray!"
} else {
  "Boo!"
}

Použití přesměrování, které zahrnuje chybový stream PowerShellu – buď explicitně přes 2> nebo implicitně prostřednictvím *> - znamená, že pokud jsou přes tento stream přijata nějaká data - což v případě volání externího programu znamená jakýkoli výstup z stderr - PowerShell nastaví $? na $false .

V oblasti externích konzolových / terminálových programů se však stderr nepoužívá pouze k výstupu chyby informace, ale všechny informace, které nejsou data , jako jsou informace o stavu. Proto nemůžete odvodit selhání z přítomnosti výstupu stderr .

Externí konzolové / terminálové programy sdělují svůj stav úspěchu pouze prostřednictvím svého výstupního kódu , což PowerShell odráží v automatickém $LASTEXITCODE proměnná.

Z výše uvedeného vyplývá, že $? může být $false i když je výstupní kód 0 , takže to není spolehlivý indikátor úspěchu – na rozdíl od $LASTEXITCODE .




  1. Jak aktualizovat sloupec ID znovu počínaje 1

  2. Základy správy datových souborů na SQL Serveru

  3. počítání, kolikrát byl skript spuštěn

  4. Jak zjistit celkový počet otevřených/aktivních připojení na serveru ms sql 2005