Ich habe ein Problem beim Aufruf von xargs in einem Bash-Skript, um den Start einer Funktion zu parallelisieren.xargs bash -c unerwartetes Token
Ich habe diese Zeile:
grep -Ev '^#|^$' "$listOfTables" | xargs -d '\n' -l1 -I args -P"$parallels" bash -c "doSqoop 'args'"
, die die Funktion startet doSqoop
, die ich vorher exportiert.
Ich gehe zu xargs
und dann zu bash -c
eine einzelne, sehr lange Zeile, die Felder enthält, die ich innerhalb der Funktion spalte und handle.
Es ist etwas wie schema|tab|dest|desttab|query|splits|....
, die ich aus einer Datei gelesen habe, über den grep Befehl oben. Mir geht es gut mit dieser Lösung, ich weiß, dass Xargs die Linie auf |
teilen können, aber ich bin ok auf diese Weise.
Es wird verwendet, um gut zu funktionieren, da ich am Ende ein weiteres Feld hinzuzufügen hatte, was diese Art von Wert enthält:
field1='varchar(12)',field2='varchar(4)',field3='timestamp',....
Jetzt habe ich diesen Fehler: bash: -c: line 0: syntax error near unexpected token '('
Ich habe versucht, der Pharhatese und einfachen Anführungszeichen zu entgehen, ohne Erfolg.
Es scheint mir, dass bash -c
interpretiert die Argumente
Warum 'xargs .... bash -c" doSqoop 'args "" '? Ist es nicht das gleiche wie 'xargs .... doSqoop args'? – user000001
Ich brauche es, um eine Funktion zu nennen, die im Skript enthalten ist (die ich exportiert habe), andernfalls würden xargs versuchen, doSqoop als externen Befehl auszuführen. – Omar
Dann wäre es besser, 'xargs' mit GNU parallel zu ersetzen, das mit exportierten Funktionen arbeiten kann. – user000001