sql >> Database >  >> RDS >> Mysql

Hoe output onderdrukken en controleren of een commando succesvol is?

Bijwerken :

  • De if ($LASTEXITCODE -eq 0) ... aanpak zal robuust blijven werken met externe programma's.
  • Echter, als en wanneer de pre-v7.2 experimentele functie met de naam PSNotApplyErrorActionToStderr wordt een officiële functie, if ($?) ... zal ook robuust werken - zie dit antwoord voor meer informatie.

Gebruik $LASTEXITCODE -eq 0 in plaats van $? om op betrouwbare wijze een afsluitcode te detecteren die niet nul is (meestal signaleringsfout) gemeld door een extern programma.

U kunt dan gebruik *> $null om alle uitvoer categorisch te onderdrukken zonder je zorgen te hoeven maken over de impact van die omleiding op $? :

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

een omleiding gebruiken die de foutstroom van PowerShell omvat - ofwel expliciet via 2> of impliciet via *> - betekent dat als er gegevens worden ontvangen via die stream - wat in het geval van het aanroepen van een extern programma elke uitvoer van stderr betekent - PowerShell stelt $? in naar $false .

Op het gebied van externe console- / terminalprogramma's wordt stderr echter niet alleen gebruikt om fout uit te voeren informatie, maar alle informatie die geen gegevens is , zoals statusinformatie. Daarom u kunt een fout niet afleiden uit de aanwezigheid van stderr-uitvoer .

Externe console-/terminalprogramma's communiceren hun successtatus uitsluitend via hun exitcode , die PowerShell weerspiegelt in de automatische $LASTEXITCODE variabel.

Uit het bovenstaande volgt dat $? kan $false zijn zelfs als de afsluitcode 0 is , dus het is geen betrouwbare succesindicator - in tegenstelling tot $LASTEXITCODE .




  1. Tenant-ID doorgeven via sql-serververbinding

  2. MySQL-scripts in docker-entrypoint-initdb worden niet uitgevoerd

  3. MYSQLI::prepare() , fout bij gebruik tijdelijke aanduiding :iets

  4. Trace Flag 3226 gebruiken om logboekregistratie van back-ups te onderdrukken