2016-06-24 12 views
2

ich einen kleinen Bash-Skript geschrieben, die um so aussieht:Ein Problem mit Anführungszeichen in einem Bash-Aufruf einer Funktion

VAR1="test" 
VAR2="test2" 

letsDoSomeStuff() { 
echo $1 
echo $2 
echo $3` 
} 



fswatch -0 . | xargs -0 -n 1 -I {} bash -c 'letsDoSomeStuff {} "$VAR1 $VAR2"' 

Was ich tun möchte, ist für Änderungen in einem Ordner suchen (über das swatch) und dann ein paar Sachen mit den geänderten Dateien in einer Funktion im Bash-Skript machen. Leider muss ich die $ VAR1 und $ VAR2 als Parameter weitergeben, da sie den Xargs-Aufruf nicht "überleben".

Die bash scripts funktioniert gut. $ VAR1 und $ VAR2 werden jedoch nicht ordnungsgemäß an die Funktion übergeben. Wenn ich das Skript starte, gibt es für jede geänderte Datei aus:

Kann mir hier jemand helfen? Ich schätze, ich vermassele die einfachen und doppelten Anführungszeichen, finde aber nicht den richtigen Weg.

Vielen Dank im Voraus

Norbert

+0

Mit $ VAR1 und $ VAR2 zusammen dreht sich in einfachen Anführungszeichen sie, in ein Token so Sie werden als ein einziges Argument für letsDoSomeStuff betrachtet. –

Antwort

2

Sie müssen in den Parametern auf Ihren Funktionsaufruf weitergeben müssen:

fswatch -0 . | 
xargs -0 -n 1 -I {} bash -c 'letsDoSomeStuff "$1" "$2" "$3"' - {} "$VAR1" "$VAR2" 
+0

So wunderbar. Es klappt! Ich musste die - obwohl. Meine Lösung ist fswatch -0. | xargs -0 -n 1 -I {} bash -c 'letsDoSomeStuff "$ 1" "$ 2" "$ 3"' {} "$ VAR1" "$ VAR2" – Norbert

+0

Ja, Sie können '-' belassen, um' $ 0 zu setzen ' – anubhava