zkusil jsem zase chatgpt :-) ne že bych to měl zapotřebí :-) ani jsem to netestoval
a koukám, že už to psal k3dar
Problém je v tom, že hodnota proměnné OPAKOVAT se nastaví uvnitř podshellu, který je spuštěn pomocí příkazu sh -c. Proměnná OPAKOVAT v této podobě existuje pouze v kontextu podshellu a změna hodnoty se neodráží na proměnné OPAKOVAT v nadřazeném shellu.
Jednou z možností, jak toto řešit, je použít přímý způsob komunikace mezi podshellem a nadřazeným shellem pomocí standardního výstupu a standardního vstupu. Můžete to provést následovně:
#!/bin/bash
declare -i OPAKOVAT=0
exit_status=0
while true; do
OPAKOVAT=0
while read -r dir; do
echo "$dir"
/home/irma/database_sort_new "$dir"
OPAKOVAT=1
done < <(find /opt/databaze_pracovni -name "database.db" -exec dirname {} \;)
echo $OPAKOVAT
if [ $OPAKOVAT -eq 1 ]; then
echo "nebude se uspavat"
continue
fi
echo "sleep"
sleep 300
done
Tento skript používá konstrukci < <() pro spuštění podshellu, který získává seznam adresářů obsahujících soubor database.db. Tento seznam je předán do cyklu while pomocí standardního vstupu, kde se každý adresář zpracovává a nastavuje se proměnná OPAKOVAT.