Returværdifejl i bash-scripts

Jeg har bash-script som dette:

rm ~/sqoop/"$TABLE"/* rmdir ~/sqoop/"$TABLE" return $? 

Efter udførelse af dette script returnerer det en værdi til næste proces, men selvom scriptet kører med succes og udførelse af alle faser i script afsluttet med succes, returnerer det 1.

Fordi dette – den næste proces finder ikke sted. / p>

Hvis jeg fjerner returerklæringen, går den næste proces glat. dette problem kom efter Hadoop-klynge op gradering, der har Ubuntu 14 og ny klynge har Ubuntu 16.

Kan du hjælpe os med at forstå, hvad der er problemet, og hvordan den næste proces kører med succes, hvis fjern kommandoen return her, og hvad er indflydelsen i produktionen, hvis fjern Return-erklæringen?

Kommentarer

  • hvad er det næste trin? hvad kontrollerer det næste trin nøjagtigt?
  • Det næste er HQL (bikubeforespørgsel i Hadoop), og det har nogle forretningstrin, det kører, hvis jeg kommenterer returværdien, det fungerer godt, men kører ikke, hvis kommentar Vend tilbage. Jeg har ' t ændrer noget på forretningslogik / shell-script, det eneste vi havde gjort er at opgradere

Svar

return udsagnet returnerer en fejl, hvis udsagnet ikke udføres fra en funktion.

I shell-funktioner, brug return. I scripts skal du bruge exit.

Et kort script som

#!/bin/bash return 0 

vil producere fejlmeddelelse

line 1: return: can only `return" from a function or sourced script 

og den indstiller $? til 1.

Hvis du ikke “t afslut scriptet med en eksplicit exit (eller hvis du afslutter med exit men uden at angive en udgangskode), returkoden for scriptet som helhed vil være det samme som den sidst udførte kommando.

At have exit "$?" er det samme som almindeligt exit, og hvis det er i slutningen af scriptet, kan dette udelades fuldstændigt.


Generelt foreslår jeg også, at du bruger $HOME snarere end tilde i scripts. Dette skyldes, at $HOME fungerer som enhver anden variabel, mens tilde udvides i et separat ekspansionstrin, hvilket betyder, at den ikke opfører sig som en variabel, og at den ikke udvides i citerede strenge . $HOME er også mere beskrivende, og da det er et script, kan du bruge få ekstra tastetryk for at gøre koden mere læselig.

Kommentarer

  • Jeg har hurtig forespørgsel til over dit svar..Jeg vil prøve ovenfor med exist 0, men jeg har en forespørgsel, hvorfor dette problem sker nu kun forud for, at jeg bruger samme forespørgsel? det fungerer, hvis jeg kommenterer tilbage erklæring er denne indflydelse nogen ting?
  • @gsrao Hvis du kommenterer return udsagnet, vil scriptets returkode være den for den sidst udførte kommando, så i dit tilfælde her, kan du helt sikkert udelade det. Jeg vil føje dette til mit svar.
  • Åh..stort ..du redder mit liv, så min sag hvis jeg kommenterer afkastet som standard scriptet returnerer sidste kommentar vellykket flag (rmdir ~ / sqoop / " $ TABLE ") ikke? ..her selvom dit besvarede arbejde mig, hvis to enkle forespørgsler, der spiser min hjerne 1) min sag, hvad er brugen af " returnerer $? " som du sagde, det fungerer som det samme, hvis jeg kommenterer " returnerer $ " 2) hvad kan der være årsag til problemet tidligere indtil nu?
  • @gsrao Ja, hvis du kommenterer return (som ikke skal ' ikke være der til at begynde med, da det ' ikke er i en funktion, så vidt jeg kan se ), vil scriptets udgangsstatus være rmdir, hvis ' er den sidste kommando i scriptet. Hvad dit sidste spørgsmål angår, forstår jeg ikke ' hvad du mener med " problemet tidligere indtil nu ".
  • Mit sidste spørgsmål..Jeg bruger det samme script, som jeg har brugt før linux / cluster up gradation, det fungerede indtil cluster up gradation, hvorfor nu sker kun dette problem? hvad kan årsagen være til dette problem?

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *