sql >> Databasteknik >  >> RDS >> Mysql

Hur undertrycker man utdata och kontrollerar om ett kommando är framgångsrikt eller inte?

Uppdatera :

  • if ($LASTEXITCODE -eq 0) ... tillvägagångssätt kommer att fortsätta att fungera robust med externa program.
  • Men om och när pre-v7.2 experimentell funktion heter PSNotApplyErrorActionToStderr blir en officiell funktion, if ($?) ... kommer att fungera robust också - se det här svaret för mer information.

Använd $LASTEXITCODE -eq 0 istället för $? för att tillförlitligt upptäcka en utgångskod som inte är noll (vanligtvis signaleringsfel) rapporterad av ett externt program.

Du kan sedan använda *> $null för att kategoriskt undertrycka all utdata utan att behöva oroa dig för effekten av den omdirigeringen på $? :

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

Använda en omdirigering som involverar PowerShells felström - antingen explicit via 2> eller implicit via *> - betyder att om någon data tas emot via den strömmen - vilket i fallet med anrop av ett externt program betyder alla utdata från stderr - PowerShell sätter $? till $false .

Men inom området för externa konsol-/terminalprogram används stderr inte bara för att mata ut fel information, men all information som inte är data , såsom statusinformation. Därför kan du inte sluta dig till misslyckande från närvaron av stderr-utdata .

Externa konsol-/terminalprogram kommunicerar sin framgångsstatus enbart via sin utgångskod , som PowerShell återspeglar i den automatiska $LASTEXITCODE variabel.

Det följer av ovanstående att $? kan vara $false även om utgångskoden är 0 , så det är inte en pålitlig framgångsindikator - till skillnad från $LASTEXITCODE .




  1. Hantering av tidszon i webbapplikation

  2. Distribuera flera Oracle-beräkningsinstanser med hjälp av en instanspool och terraform

  3. kan inte släppa den främmande nyckeln

  4. Varför returnerar inte PostgreSQL nollvärden när villkoret är <> sant