While-Loop-Subshell-Dilemma in Bash

Ich möchte alle * bin-Dateien in einem bestimmten Verzeichnis berechnen. Anfangs arbeitete ich mit einemfor-loop:

var=0
for i in *ls *bin
do
   perform computations on $i ....
   var+=1
done
echo $var

In einigen Verzeichnissen sind jedoch zu viele Dateien vorhanden, was zu einem Fehler führt:Argument list too long

Deshalb habe ich es mit einer Pfeife versuchtwhile-loop:

var=0
ls *.bin | while read i;
do
  perform computations on $i
  var+=1
done
echo $var

Das Problem besteht nun darin, mit Hilfe der Rohrleitungen Unterschalen zu erstellen. Somit,echo $var kehrt zurück0.
Wie kann ich mit diesem Problem umgehen?
Der ursprüngliche Code:

#!/bin/bash

function entropyImpl {
    if [[ -n "$1" ]]
    then
        if [[ -e "$1" ]]
        then
            echo "scale = 4; $(gzip -c ${1} | wc -c) / $(cat ${1} | wc -c)" | bc
        else
            echo "file ($1) not found"
        fi
    else
        datafile="$(mktemp entropy.XXXXX)"
        cat - > "$datafile"
        entropy "$datafile"
        rm "$datafile"
    fi

    return 1
}
declare acc_entropy=0
declare count=0

ls *.bin | while read i ;
do  
    echo "Computing $i"  | tee -a entropy.txt
    curr_entropy=`entropyImpl $i`
    curr_entropy=`echo $curr_entropy | bc`  
    echo -e "\tEntropy: $curr_entropy"  | tee -a entropy.txt
    acc_entropy=`echo $acc_entropy + $curr_entropy | bc`
    let count+=1
done

echo "Out of function: $count | $acc_entropy"
acc_entropy=`echo "scale=4; $acc_entropy / $count" | bc`

echo -e "===================================================\n" | tee -a entropy.txt
echo -e "Accumulated Entropy:\t$acc_entropy ($count files processed)\n" | tee -a entropy.txt

Antworten auf die Frage(3)

Ihre Antwort auf die Frage