【发布时间】:2018-04-16 05:30:22
【问题描述】:
我正在尝试启动多个进程以完成一些测试套件。在我的 bash 脚本中,我有以下内容
printf "%s\0" "${SUITE_ARRAY[@]}" | xargs -P 2 -0 bash -c 'run_test_suite "$@" ${EXTRA_ARG}'
以下是定义的脚本,只涉及基本内容。
SUITE_ARRAY 将是可能有 1 个或多个套件的列表,{Suite 1, Suite 2, ..., Suite n} EXTRA_ARG 将像一个特定的名称一样将值存储在另一个脚本中
#!/bin/bash
run_test_suite(){
suite=$1
someArg=$2
someSaveDir=someArg"/"suite
# some preprocess work happens here, but isn't relevant to running
runSomeScript.sh suite someSaveDir
}
export -f run_test_suite
SUITES=$1
EXTRA_ARG=$2
IFS=','
SUITECOUNT=0
for csuite in ${SUITES}; do
SUITE_ARRAY[$SUITECOUNT]=$csuite
SUITECOUNT=$(($SUITECOUNT+1))
done
unset IFS
printf "%s\0" "${SUITE_ARRAY[@]}" | xargs -P 2 -0 bash -c 'run_test_suite "$@" ${EXTRA_ARG}'
我遇到的问题是如何将${EXTRA_ARG} 传递给 xargs。根据我的理解, xargs 将采用管道传输的任何内容,因此我拥有它的方式似乎不正确。
关于如何正确传递值的任何建议?提前致谢
【问题讨论】:
-
请指定
${SUITE_ARRAY[@]}中通常有多少个值,以及${EXTRA_ARG}是否打算被使用一次是否是$someArg的重复值。 -
${SUITE_ARRAY[@]}可能因运行而异;少至 2 至多至 20+。$someArg对于每次调用都将保持不变,但是当调用 xargs 所在的主脚本时,${EXTRA_ARG}可能会有所不同。 -
稍微编辑了问题和代码以反映您的 cmets。
-
我之前评论中的错字,特此更正:请指定
${SUITE_ARRAY[@]}中通常有多少个值,以及${EXTRA_ARG}是打算使用一次,还是作为重复值对于$someArg。 -
export EXTRA_ARG