Létrehoztam két tömböt a readarray segítségével.
Mind a kettő fájlneveket tárol. Ez most csak tesztfájl, és nem a valódi cronnal dolgozom, csak annak egy kimásolt tartalmával!
# sh fájlok a mappákból
readarray Array1 <<< "$(find ${path} -name *.sh | awk -vFS="/" '{print $7}' | sort)"
# fájlnevek a cron tartalomból
readarray Array2 <<< "$(cat ${cron_data} | awk -vFS="/" '{print $7}' | sed -e '/^$/d' | sort)"
Ha kilistázom az első kettő tömb tartalmát, akkor úgy látom nincs hiba.
echo "${Array1[@]}"
echo "${Array2[@]}"
Egy 3. tömbbe beletettem a kettő közti különbséget.
# A cél a 3. tömbbe beletenni a két fájllista tatalmának különbségét. Tehát ha az sh fájlok már nem léteznek, de a cron tartalomban igen, akkor azokat ki kell törölni onnan.
readarray Array3 <<< "$(echo ${Array2[@]} ${Array1[@]} | tr '' '' | sort | uniq -u | sed -e 's/^ //g')"
Ezzel a sed-del kitörlöm a szó eleji szóközt. Lehet hogy az üres sort is kikéne? De attól ez még szvsz hibás.
echo "${Array2[0]}"
Itt már érdekességek adódnak. A 0 index csak egy üres sor. ???
echo "${Array2[1]}"
Ez az 1 index az első látható bejegyzés.
echo "${Array2[2]}"
Ezt meg már egy szóközzel kezdi.
Mi lehet ennek az oka?
Amikor a két tömb összehasonlításra kerül, akkor van valami gond?
Ugyanakkor egy ciklus keretén belül kiolvasom a 3. tömb tartalmát, és ami parancssorban jól működik, itt nem.
A sed: -e kifejezés #1, karakter 1: Befejezetlen regex cím - hibát ír ki. Gondolom a 0 index üressége miatt.
for name in ${Array3[@]}; do
echo nevek: ${name}
echo ${cron_data}
sleep 3
sed -i "/${name}/d" "${cron_data}"
done
Hogy lehet ezt orvosolni?