• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> Klick

Bash-Funktion über find aufrufen und globale Variaben benutzen

Dolon

Erdapfel
Registriert
01.05.14
Beiträge
1
Hallo,

ich finde keine Lösung für folgendes Problem:
Mit jedem von find gefundenen Element (Datei, Verzeichnis, ...) soll eine Funktion aufgerufen werden, in der mehrere (globale) Variablen geändert werden und deren Werte dann auch global abrufbar sind. Mein nicht funktionierendes Minimalbeispiel:

--------------------------------------------------
#!/bin/bash

typeset -i var1=0
var2=""

function myfunc {
let var1=$var1+1
let var2=$1
echo $var1 $var2 $1
}
export -f myfunc

find . -exec myfunc '{}' \;
echo $var1 $var2
--------------------------------------------------

$var1 soll in dem Beispiel zählen, wie oft myfunc aufgerufen wurde.
$var2 soll das Argument des letzten Aufrufs zurück geben.

In meiner tatsächlichen Anwendung sieht myfunc natürlich viel aufwändiger aus. Aus diesem Grund hilft mir nicht, die Anzahl der Aufrufe über wc oder andere bereits vorhandene Zählfunktionen zu bekommen.

Was noch wichtig wäre: Das Skript soll später auf sehr sehr große Verzeichnisbäume losgelassen werden. Aus diesem Grund sollte jedes von find gefundene Element sofort zum Aufruf meiner Funktion führen und nicht erst das gesamte Ergebnis von find abgewartet werden. So kann ich nämlich Statusmeldungen ausgeben und warte nicht ewig, ohne dass irgendetwas passiert.

Hat jemand eine Lösung parat?

Besten Dank & viele Grüße,
Dolon
 

DrJ

Erdapfel
Registriert
10.07.14
Beiträge
4
Hallo Dolon,

ist Dir mit folgender Mechanik geholfen (Minimalbeispiel)? ...:
find . | while read file; do echo $file; done

DrJ
 

Olivetti

Golden Delicious
Registriert
12.09.09
Beiträge
6
Code:
#!/bin/bash
#set -vx

var1=0
var2=""

myfunc() {
 ((var1++))
   var2="$1"
   echo "$var1 $var2"
}

while read file; do myfunc "$file"; done < <(find .)

echo -e "---\n$var1 $var2"