Mám bash skript takto:
rm ~/sqoop/"$TABLE"/* rmdir ~/sqoop/"$TABLE" return $?
Po provedení tohoto skriptu vrací hodnotu do dalšího procesu, ale přestože skript běží úspěšně a úspěšné dokončení všech fází skriptu se vrací 1.
Protože toto – další proces neprobíhá.
Pokud odstraním příkaz return, další proces proběhne hladce. tento problém nastal po přechodu klastru Hadoop, který má Ubuntu 14 a nový klastr s Ubuntu 16.
Můžete nám prosím pomoci pochopit, o co jde a jak úspěšně běží další proces, pokud odstraníte příkaz return zde a jaký je dopad na produkci, pokud odstraníte příkaz Return?
Komentáře
- jaký je další krok? co přesně zkontroluje další krok?
- Další je HQL (dotaz úlu v Hadoop) a má nějaké obchodní kroky, které běží, když okomentuji návratovou hodnotu, funguje dobře, ale neběží, pokud okomentuje vrátit se. ' t nic nemění na obchodní logice / shell skriptu, jedinou věcí, kterou jsme udělali, je upgrade
odpověď
Příkaz return
vrací chybu, pokud příkaz není proveden z funkce.
Ve funkcích prostředí použijte return
. Ve skriptech použijte exit
.
Krátký skript jako
#!/bin/bash return 0
vytvoří chybová zpráva
line 1: return: can only `return" from a function or sourced script
a nastaví $?
na 1.
Pokud ne Skript nelze opustit explicitním exit
(nebo pokud opustíte exit
, ale bez zadání kódu ukončení), návratovým kódem skript jako celek bude stejný jako poslední provedený příkaz.
Mít exit "$?"
je stejné jako obyčejný exit
, a pokud je na konci skriptu, může být zcela vynechán.
Obecně také doporučuji použít $HOME
spíše než vlnovku ve skriptech. Důvodem je, že $HOME
funguje jako každá jiná proměnná, zatímco vlnovka se rozšiřuje v samostatném kroku rozšiřování, což znamená, že se chová jako proměnná a že se nerozšiřuje v uvozovkách . $HOME
je také popisnější a protože se jedná o skript, můžete utratit několik dalších stisků kláves, aby byl kód čitelnější.
Komentáře
- Mám rychlý dotaz na vaši odpověď..zkusím výše s existovat 0, ale mám jeden dotaz, proč se tento problém stane nyní, pouze previsouly, používám stejný dotaz? funguje to, když vrátím komentář prohlášení je tento dopad nějaká věc?
- @gsrao Pokud komentujete příkaz
return
, návratovým kódem skriptu bude kód posledního provedeného příkazu, takže ve vašem případě zde to můžete rozhodně vynechat. Přidám to ke své odpovědi. - Ach … skvělý .. zachraňujete mi život, takže můj případ, pokud ve výchozím nastavení komentuji návrat skript vrátí poslední komentář úspěšný příznak (rmdir ~ / sqoop / " $ TABLE ") správně? .. i když vaše odpověď funguje me if two simple queries which are eating my brain 1) my case what is use of " návrat $? " jak jste řekl, bude fungovat stejně, pokud okomentuji " návrat $ " 2) co je možné, že problém vznikne dříve?
- @gsrao Ano, pokud komentujete
return
(který by ' tam neměl být, protože ' není ve funkci, pokud vidím ), bude stav ukončení skripturmdir
, pokud je ' posledním příkazem ve skriptu. Pokud jde o vaši poslední otázku, nerozumím ' tomu, co máte na mysli tím " problémem dříve
.