PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Escaping vom * in der Bash



hiTCH-HiKER
12.12.14, 17:03
Ich habe folgendes Problem...

In einem Skript mache ich einen Aufruf ./SKRIPTNAME $QUELLE $ZIEL

In der Quelle soll ein * enthalten sein, da ich nur bestimmte Dateiendungen kopieren möchte.

Jetzt habe ich zwei Schreibweisen ausprobiert:

QUELLE="/verzeichnis/*.csv"
und
QUELLE="/verzeichnis/\*.csv"

Im ersten Fall löst er den * auf und ersetzt den von mir vorgesehenen Inhalt der Variable QUELLE durch eine beliebige Datei aus dem angegebenen Verzeichnis, nicht sehr schön.
Im zweiten Fall wiederum ignoriert er das Escaping, was irgendwo auch logisch ist, weil der Stern nicht zu den Zeichen gehört die bei der Bash escaped werden müssen.

Wie bekomme ich da eine vernünftige Parameterübergabe hin? Stehe echt grad auf dem Schlauch :mad:

snowcrash23
12.12.14, 17:54
Moin hiTCH-HiKER.

Hast du beim referenzieren der Variable auch Anführungszeichen Benutzt?

echo "$QUELLE"

MfG
snowcrash23

hiTCH-HiKER
12.12.14, 19:10
Moin hiTCH-HiKER.

Hast du beim referenzieren der Variable auch Anführungszeichen Benutzt?

echo "$QUELLE"

MfG
snowcrash23

In dem Skript, das aufgerufen wird steht momentan zum Testen nur:
echo "$1"
echo "$2"

Im Aufrufskript wiederum:
QUELLE="/verzeichnis/*.csv"
ZIEL="/anderesverzeichnis/"
./kopierskript.sh $QUELLE $ZIEL

Wenn ich es aufrufe, dann stehen in $1 und $2 die erstbesten Dateinamen die er im Quellverzeichnis findet :ugly:

marce
12.12.14, 19:31
Ersetze mal " durch ' und quote in der 3. Zeile die Variablen mit "

hiTCH-HiKER
15.12.14, 15:24
Ersetze mal " durch ' und quote in der 3. Zeile die Variablen mit "

Perfekt, jetzt geht es!
Danke dir, da wäre ich im Leben nicht drauf gekommen, wo kann man solche Details nachlesen? ;)

marce
15.12.14, 17:27
in jeder guten Bash-Scripting-Doku, z.B. dem http://www.tldp.org/LDP/abs/html/.

Im Endeffekt musst Du Dir nur "im Kopf" ausdenken, was die Bash mit den Variablen zum Zeitpunkt der Wertzuweisung und der Verabeitung macht / sieht / tut / ...