我遇到了在bash腳本中調用xargs以並行啓動函數的問題。xargs bash -c意外標記
我有這樣一行:
grep -Ev '^#|^$' "$listOfTables" | xargs -d '\n' -l1 -I args -P"$parallels" bash -c "doSqoop 'args'"
會啓動,我以前導出功能doSqoop
。
我傳遞給xargs
,然後傳遞給bash -c
一個很長的行,包含我在函數內部分割和處理的字段。
這是類似schema|tab|dest|desttab|query|splits|....
,我通過上面的grep命令從文件中讀取。我對這個解決方案很好,我知道xargs可以在|
上劃線,但我可以這樣。
它曾經工作得很好,因爲我不得不在最後添加一個字段,其中包含這樣的值:
field1='varchar(12)',field2='varchar(4)',field3='timestamp',....
現在我有這樣的錯誤: bash: -c: line 0: syntax error near unexpected token '('
我試着逃避pharhentesis和單引號,沒有成功。
在我看來,bash -c
正在解釋的論據
爲什麼'xargs .... bash -c「doSqoop'args'」'?與xargs .... doSqoop args'不一樣嗎? – user000001
我需要它調用腳本中包含的函數(我導出的),否則xargs會嘗試執行doSqoop作爲外部命令。 – Omar
然後用GNU parallel替換'xargs'會更好,可以使用導出的函數。 – user000001