Jeg tester forskjellige ting i bash scripting og jeg kom inn i et problem som jeg ikke kan få en forklaring på.

Jeg er med vilje skrive en feil kommando, for å få en utgangskode som er forskjellig fra 0, men på en eller annen måte ser det ut til at jeg fortsatt får 0.

Koden jeg kjører er:

USER_NAME=$(id -uns) if [[ ${?} -ne 0 ]] then echo "Your command failed to execute with exit code ${?}" exit 1 fi echo "Your username is ${USER_NAME}" 

Utgangen av koden min er:

id: ukjent alternativ – s

Prøv «id –help» for mer informasjon.

Kommandoen din ble ikke utført med utgangskode 0

Brukernavnet ditt er

Jeg gjetter at det på en eller annen måte viser utgangskoden for ekkokommandoen? Likevel, hvis utgangskoden er 0, hvorfor angir den i if-setningen?

Hvis det er tingen, hvordan kan jeg gjøre det for å vise den faktiske utgangskoden som skal vises?

Svar

I koden din, i if -uttalelsen, utgangsstatusen som får trykt er utgangsstatus for testen [[ ${?} -ne 0 ]]. Verdien $? er alltid utgangsstatus for den sist utførte kommandoen, og testen teller som en kommando, i det minste med hensyn til å sette verdien til $? til resultatet.

Hvis du vil skrive ut utgangsstatus for id, tilordner du den til en variabel hvis verdien ikke endres,

id -uns err=$? if [[ $err -ne 0 ]]; then printf "id failed with code %d\n" "$err" >&2 exit 1 fi 

Kommentarer

  • Dette ikke-POSIX-skriptet utfører ikke test[[ er en del av ksh syntaksen og kjører som en del av tolken, men ikke som en innebygd Det ser imidlertid ut til at denne delen av tolken tilbakestiller den huskede utgangskoden.
  • Hvorfor utfører skriptet begge echo s? Jeg hadde forventet det for å avslutte etter den første, og ikke komme til den andre.
  • @pericynthion De viser ikke koden de faktisk kjørte. Resultatet som de viser kommer fra en versjon av koden uten exit 1 uttalelsen i den. Det ble sannsynligvis lagt til senere.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *