Oops! Это не Баш! Во всяком случае ...
Причиной запуска процесса является продолжение основного потока, в то же время делая что-то, что не влияет на это. Я бегу по каталогам из 10 тыс. Изображений и удаляю дубликаты. Я поместил код сравнения в функцию и подпроцесс, который. Это очень быстро
Способ получить значение обратно - создать канал, отобразить в нем значение и затем прочитать канал: (Внимание! Следующий код, вероятно, не работает, просто показывает работающий канал)
mkfifo pipe
moved=0
# Use imageMagick 'compare' to find files with zero difference:
comPare () {
if [[ ! $(compare -metric AE $1 $2) ]]; then
mv $2 moved;
echo 1 > pipe;
else echo 0 > pipe
fi
}
# For every file in the dir, compare it to every other one:
for file1 in $( ls *.bmp | head -n $(( $( ls *.bmp | wc -l) - 1)); do
for file2 in $( ls *.bmp | tail -n $(( $( ls *.bmp | wc -l) - 1)); do
comPare file1 file2 &
moved=$(( $(cat pipe) + 1 ))
done
done
rm pipe
echo "Moved $moved files"
Единственная проблема на данный момент заключается в том, что я работаю на USB-накопителе, и разрешения мешают мне создать канал. Помимо этого ...