sql >> Database teknologi >  >> RDS >> Mysql

Hvordan undertrykker man output og kontrollerer, om en kommando er vellykket eller ej?

Opdater :

  • if ($LASTEXITCODE -eq 0) ... tilgang vil fortsætte med at arbejde robust med eksterne programmer.
  • Men hvis og når præ-v7.2 eksperimentel funktion navngivet PSNotApplyErrorActionToStderr bliver en officiel funktion, if ($?) ... vil også fungere robust - se dette svar for mere information.

Brug $LASTEXITCODE -eq 0 i stedet for $? for pålideligt at detektere en udgangskode, der ikke er nul (typisk signaleringsfejl) rapporteret af et eksternt program.

Du kan derefter bruge *> $null for kategorisk at undertrykke alt output uden at skulle bekymre dig om virkningen af ​​den omdirigering på $? :

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

Brug af en omdirigering, der involverer PowerShells fejlstrøm - enten eksplicit via 2> eller implicit via *> - betyder, at hvis nogen data modtages via den strøm - hvilket i tilfælde af opkald til et eksternt program betyder enhver udgang fra stderr - PowerShell sætter $? til $false .

Men i området for eksterne konsol-/terminalprogrammer bruges stderr ikke kun til at udsende fejl information, men enhver information, der ikke er data , såsom statusoplysninger. Derfor du kan ikke udlede fejl fra tilstedeværelsen af ​​stderr-output .

Eksterne konsol-/terminalprogrammer kommunikerer deres successtatus udelukkende via deres afgangskode , som PowerShell afspejler i den automatiske $LASTEXITCODE variabel.

Det følger af ovenstående, at $? kan være $false også selvom udgangskoden er 0 , så det er ikke en pålidelig succesindikator - i modsætning til $LASTEXITCODE .




  1. Lagring af meget store heltal i MySQL

  2. Brug af setDate i PreparedStatement

  3. MySQL:hvordan man får x antal resultater pr. gruppering

  4. #1060 - Dublet kolonnenavn 'id'