Minulla on tällainen bash-komentosarja:
rm ~/sqoop/"$TABLE"/* rmdir ~/sqoop/"$TABLE" return $?
Suorituksen jälkeen tämä komentosarja palauttaa arvon seuraavaan prosessiin, mutta vaikka komentosarja suoritetaan onnistuneesti ja suoritetaan kaikki komentosarjan vaiheet onnistuneesti, se palauttaa 1.
Koska tätä – seuraavaa prosessia ei tapahdu. / p>
Jos poistan palautuslausekkeen, seuraava prosessi sujuu sujuvasti. tämä ongelma tuli sen jälkeen, kun Hadoop-klusteri oli porrastettu, jossa Ubuntu 14: llä ja uudella klusterilla on Ubuntu 16.
Voitteko auttaa meitä ymmärtämään ongelman ja miten seuraava prosessi toimii onnistuneesti, jos poistat palautuskomennon tässä ja mitä vaikutusta tuotantoon tapahtuu, jos Return-lause poistetaan?
Kommentit
- mikä on seuraava vaihe? mitä tarkalleen seuraava askel tarkistaa?
- Seuraava on HQL (Hive-kysely Hive) ja sillä on joitain liiketoiminnan vaiheita, jos se kommentoi palautusarvoa, joka toimii hyvin, mutta ei toimi, jos kommentoi palata. minulla on ' t muuta mitään liiketoimintalogiikassa / shell-komentosarjassa, ainoa asia, jonka olimme tehneet, on päivitys
Vastaus
Lauseke return
palauttaa virheen, jos käskyä ei suoriteta toiminnosta.
Shell-funktioissa käytä return
. Käytä komentosarjoissa exit
.
Lyhyt komentosarja, kuten
#!/bin/bash return 0
, tuottaa virhesanoma
line 1: return: can only `return" from a function or sourced script
ja se asettaa $?
arvoksi 1.
Jos et ”t poistu komentosarjasta nimenomaisella exit
-toiminnolla (tai jos poistut exit
-toiminnolla, mutta et määritä poistumiskoodia), komentosarja kokonaisuudessaan on sama kuin viimeksi suoritettu komento.
exit "$?"
on sama kuin tavallinen exit
, ja jos se on komentosarjan lopussa, se voidaan jättää kokonaan pois.
Ehdotan myös, että käytät $HOME
eikä tilde komentosarjoissa. Tämä johtuu siitä, että $HOME
toimii kuten mikä tahansa muu muuttuja, kun taas tilde laajennetaan erillisessä laajennusvaiheessa, mikä tarkoittaa, että se ei toimi muuttujana eikä sitä ole laajennettu lainausmerkeissä . $HOME
on myös kuvailevampi, ja koska se on komentosarja, voit käyttää muutaman ylimääräisen näppäimen painalluksen koodin luettavuuden parantamiseksi.
Kommentit
- Minulla on nopea kysely vastauksesi yläpuolella … yritän yllä olevaa olemassa olevalla 0: lla, mutta minulla on yksi kysely, miksi tämä ongelma tapahtuu nyt, käytän vain ennalta, käytän samaa kyselyä? se toimii, jos kommentoin palata onko tämä vaikutus mikään asia?
- @gsrao Jos kommentoit
return
-lausetta, komentosarjan palautuskoodi on viimeksi suoritetun komennon koodi, joten tässä tapauksessa voit jättää sen ehdottomasti pois. Lisän tämän vastaukseeni. - Voi … suuri .. sinä pelastat henkeni, joten minun tapaukseni, jos kommentoin palautusta oletuksena skripti palauttaa viimeisen kommentin onnistuneen lipun (rmdir ~ / sqoop / " $ TABLE ") eikö? minua, jos kaksi yksinkertaista kyselyä, jotka syövät aivoni 1) minun tapauksessani mikä on " return $? " kuten sanoit, se toimii samalla tavalla, jos kommentoin " return $ " 2) mikä saattaa olla mahdollista aiheuttaa ongelman aikaisemmin?
- @gsrao Kyllä, jos kommentoit
return
(jonka ei pitäisi ' olla alussa, koska se ' ei ole toiminnossa, sikäli kuin näen ), komentosarjan poistumistila onrmdir
-tilan, jos se ' on komentosarjan viimeinen komento. Mitä tulee viimeiseen kysymykseesi, en ymmärrä oikein ' en tarkalleen mitä tarkoitat " kysymyksellä aikaisemmin tähän mennessä ". - Viimeinen kysymykseni.. käytän samaa komentosarjaa, jota olen käyttänyt ennen linux / cluster up gradationia, se toimi, kunnes cluster up gradation, miksi nyt vain tämä ongelma tapahtuu? mikä voi aiheuttaa tämän ongelman?