Olen hämmentynyt bash-komentosarjan lopussa olevan poistumiskoodin merkityksestä: tiedän kyseisen poistumiskoodin 0 tarkoittaa, että se valmistui onnistuneesti ja että poistumiskoodinumeroita on paljon enemmän (127 jos en ole väärässä?)
Kysymykseni koskee, kun näen poistumiskoodin 0 komentosarjan lopussa, se pakottaa poistumiskoodin 0: ksi, vaikka komentosarja epäonnistui tai onko sillä muuta merkitystä?
Kommentit
Vastaa
Sisäänrakennettu komento exit
poistuu kuoresta (mistä Bash ”s viite ):
exit [n]
Poistu kuoresta ja palauta n-tila Jos n jätetään pois, poistumistila on viimeksi suoritetun komennon tila. Kaikki EXIT: n ansat suoritetaan ennen kuoren päättymistä.
Tiedoston loppuun suorittaminen myös poistuu, palauttamalla viimeisen komennon palautuskoodin, joten kyllä, lopullinen exit 0
tekee komentosarjan poistumisesta onnistuneen riippumatta (eli olettaen, että komentosarja saavuttaa viimeisen exit
.) Komentosarjan lopussa voit käyttää myös komentoa true
tai saadaksesi nollan poistumiskoodin.
Tietenkin useammin” exit
käytetään lopettaaksesi komentosarjan keskellä.
Näiden tulisi tulostaa 1 ($?
sisältää edellisen komennon palauttaman poistumiskoodin) :
sh -c "false" ; echo $? sh -c "false; exit" ; echo $?
Tämän pitäisi tulostaa 0:
sh -c "false; exit 0" ; echo $?
En ”ole” varma onko skriptin käsite ”epäonnistunut” exit
suoritettaessa järkevää, koska on täysin mahdollista, että jotkut komentosarjan suorittamat komennot epäonnistuvat, mutta komentosarja itse onnistuu . Komentosarjan kirjoittaja voi päättää, mikä on menestys ja mikä ei.
Lisäksi lähtökoodien vakioalue on 0..255. Yli 127: n koodeja kuori käyttää osoittamaan signaalilla päättyvän prosessin, mutta ne voidaan palauttaa tavallisella tavalla. wait
-järjestelmäkutsu palauttaa laajemman arvon, loput sisältävät käyttöjärjestelmän asettamat tilabitit.
Kommentit
- Siisti, en tiennyt ' tiennyt 8-bittisistä poistumiskoodien numeroinnista. Kiitos!
- Huomaa, että kun prosessi tapetaan, se ei poistu poistumiskoodilla > 127. Se ' s vain, että jotkut kuoret asettavat
$?
-arvoksi 128 + signum siinä tapauksessa. Katso yksityiskohtia kohdasta Oletusarvoinen poistumiskoodi, kun prosessi lopetetaan? . -
exit 0
palaa vain 0, jos poistuminen suoritetaan. (se voi poistua toisella reitillä).
Vastaus
0 tarkoittaa menestystä, positiiviset kokonaisluvut epäonnistumista. Erilaisia virhekoodeja on 255, mutta arvot 126 ja sitä pidemmät varataan osoittamaan, että ohjelmaa ei voitu käynnistää (126 tai 127) tai se tapettiin signaalilla (vähintään 129). Katso Oletusarvoinen poistumiskoodi, kun prosessi lopetetaan? ja Mitä paluu / poistumisarvoja voin käyttää bash-funktioissa / komentosarjoissa? saadaksesi lisätietoja.
Shell-komentosarjan poistumistila on viimeisen komentosarjan suorittaman komennon exit-tila. Esimerkiksi
#!/bin/sh somecommand
palauttaa somecommand
: n poistumistila, kun taas
#!/bin/sh somecommand exit 0
palauttaa 0 riippumatta siitä, mikä somecommand
palasi.Tämä toinen komentosarja voidaan myös kirjoittaa
#!/bin/sh somecommand true
exit 0
sijoittaminen komentosarjan loppuun ei välttämättä aiheuta Palauttaa sen 0. Tämä palauttaa sen vasta, kun komentosarjan loppu on saavutettu. Esimerkiksi seuraava komento palauttaa aina arvon 3:
#!/bin/sh exit 3 exit 0
seuraava komentosarja palauttaa myös virhekoodin syntaksivirheestä viestin lisäksi:
#!/bin/sh } exit 0
Seuraava komentosarja palauttaa joko 1 tai 0 riippuen sen ensimmäinen argumentti:
#!/bin/sh if [ "$1" = "foo" ]; then exit 1 fi exit 0
Seuraava komentosarja palauttaa tilan somecommand
, koska set -e
saa komentosarjan poistumaan, jos somecommand
epäonnistuu:
#!/bin/sh set -e somecommand exit 0
exit 0
, se poistuu poistumiskoodilla 0 riippumatta siitä, mitä komentosarjassa tapahtuu.exit 0
, se poistuu koodilla 0 vain, jos viimeinen käsky suoritettiin. Ainoa vaikutusexit 0
-ohjelmaan komentosarjan lopussa on palauttaa 0 edellisen käskyn tilan sijaan.exit 0
jossain vaiheessa, se palauttaa poistumiskoodin 0 riippumatta siitä, mitä on tapahtunut ennen sitä.