Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: iko 20. 11. 2023, 08:19:01
-
Zdravim
V skriptoch obcas pouzivam na ochranu proti viacnasobnemu spusteniu lock subory a trap a vsetky vypisy davam do log suboru:
(
if { set -C; 2>/dev/null >$LOCKFILE; }; then
trap "rm -f $LOCKFILE" EXIT
else
echo `date`: "Lock file exists… exiting"
exit 1
fi
...
....
) 2>&1 >>log
Pokial to cele zabalim do subshelu (normalnymi zatvorkami), vsetko funguje. Ak to ale miesto subshellu zabalim do {}:
{
....
} 2>&1 >>log
tak trap uz nefunguje. Preco?
-
Co místo závorek použít na přesměrování exec ?
https://unix.stackexchange.com/questions/184125/exec-redirects-in-bash
-
Co místo závorek použít na přesměrování exec ?
https://unix.stackexchange.com/questions/184125/exec-redirects-in-bash
To by slo :)
V bashi robim uz roky ale o tomto som nevedel... vdaka :) :)
-
Co místo závorek použít na přesměrování exec ?
exec &>>"$logfile"
nejdřív jsem na to koukal dost nedůvěřivě, ale po pročtení man-u to vlastně dává smysl.
Zajímavé, díky.
-
Možná of-topic, ale na ty zámky - koukněte na man 1 flock , to řeší takové ty chyby jako program skončil ale něco ten .lck nesmazalo apod.
-
Pokial to cele zabalim do subshelu (normalnymi zatvorkami), vsetko funguje. Ak to ale miesto subshellu zabalim do {}:
Odpovedal si si sám. () - subshell, {} - blok, tj. žiaden shell sa neukončuje, nenastane EXIT udalosť.
~$ cat s1
#!/bin/bash
echo Start
(
echo Subshell start
trap "echo Exit trap - subshell" EXIT
echo Subshell end
)
echo End
~$ bash s1
Start
Subshell start
Subshell end
Exit trap - subshell
End
~$ cat s2
#!/bin/bash
echo Start
{
echo Block start
trap "echo Exit trap" EXIT
echo Block end
}
echo End
~$ bash s2
Start
Block start
Block end
End
Exit trap
~$
Ak by to nebol voľný blok ale funkcia, mohol by si použiť RETURN trap.