Portál AbcLinuxu, 15. května 2024 23:39


Dotaz: Jak zabít su command ve skriptu a získat exit code vnitřku

22.5.2017 12:57 v
Jak zabít su command ve skriptu a získat exit code vnitřku
Přečteno: 373×
Odpovědět | Admin
Ahoj, ve skriptu mujskript.sh mám následující:
exec su -c "nejakycommand"
Pokud zabiju mujskript.sh, tak su vypíše "Session terminated, terminating shell...killed" a vždy se mi vrátí exit code 1, ačkoliv nejakycommand vrací 0. Jak zajistit, aby se vracel skutečný exit code commandu v su?

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

22.5.2017 13:03 helb
Rozbalit Rozbalit vše Re: Jak zabít su command ve skriptu a získat exit code vnitřku
Odpovědět | | Sbalit | Link | Blokovat | Admin
Neslo by z toho su proste „rucne“ vratit kod posledniho prikazu (promenna $?)?
su -c "nejakycommand; exit $?"
22.5.2017 13:37 v
Rozbalit Rozbalit vše Re: Jak zabít su command ve skriptu a získat exit code vnitřku
Příkaz nejakycommand běží na pozadí a při terminování vrací exit 0, nicméně su vrátí exit 1. Pokud by se vnitřek su ukončil (uvnitř by neběželo nic trvale), tak to je také ok, problém je démon spuštěný přes su. Nějak to jde ošéfovat pokud nepoužiju exec a signal předám manuálně přes:
trap 'kill -TERM $PID1; wait $PID1; exit $A' TERM INT

su -c "nejakyprikaz"
A=$?
PID1=$!
ale to mi přijde jako pěkná prasárna.
24.5.2017 16:22 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: Jak zabít su command ve skriptu a získat exit code vnitřku
Odpovědět | | Sbalit | Link | Blokovat | Admin

Nijak, protože exec zajistí, že adresní prostor původního shellu se nahradí tím nějakým commandem, tedy jinými slovy že nějaký command se stane přesně tím procesem, kterým byl původně shell.

Řešením je nepoužívat exec a místo toho ve skriptu spouštět nějaký command běžným způsobem, tedy aby se shell forknul a počkal na výsledek nějakého commandu. Pak se dá s tím výsledkem dál pracovat, jak už někdo psal výše.

24.5.2017 22:30 v
Rozbalit Rozbalit vše Re: Jak zabít su command ve skriptu a získat exit code vnitřku
Ano a jak jsem zjistil také nahradit su za sudo, su vrací exit code + číslo trap signalu, sudo vrací jen exit code.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.