Bash 在xargs中将参数传递给并行处理

Bash 在xargs中将参数传递给并行处理,bash,parallel-processing,xargs,Bash,Parallel Processing,Xargs,以下命令中的xargs_tasks的目的是什么 cat source.ndjson | tr '\n' '\0' | xargs -0 -n 1 -P 8 sh -c './theprocess.py $1' xargs_tasks >> errors.log 2>&1 也就是说,在阅读了-c选项至sh的手册页详细信息后,您实际上可以通过运行以下命令获得相同的结果: cat source.ndjson | tr '\n' '\0' | xargs -0 -n 1 -P

以下命令中的
xargs_tasks
的目的是什么

cat source.ndjson | tr '\n' '\0' | xargs -0 -n 1 -P 8 sh -c './theprocess.py $1' xargs_tasks >> errors.log 2>&1
也就是说,在阅读了
-c
选项至
sh
的手册页详细信息后,您实际上可以通过运行以下命令获得相同的结果:

cat source.ndjson | tr '\n' '\0' | xargs -0 -n 1 -P 8 sh -c './theprocess.py $0' >> errors.log 2>&1
也就是说,对于
-c
,引号中字符串后面的任何参数都被分配给变量
$0
$1
,等等<第一个命令中的code>xargs_任务被设置为
$0
,通过管道传输到
xargs
的参数一次设置为
$1
。因此,我的第二个命令的工作原理完全相同,因为我直接在字符串中包含
$0
,而不是
$1


我的猜测是,
xargs\u tasks
在类似于
htop
的内容中为您提供了一个短字符串以进行筛选,但这是一个延伸。

当您使用
-c
选项进行
sh
时,命令后的下一个参数在命令中被视为
$0
,而它之后的参数则变为
$1
$2


$0
应该包含shell脚本的名称,而参数从
$1
开始。因此,
xargs_任务
是否只是为了有一个占位符来防止第一个参数被放入
$0

,所以您认为第一个命令使用
xargs_任务
仅仅是为了遵循bash脚本中变量命名的标准约定?看起来很合理,是的。在一般情况下,如果命令使用诸如
“$@”
中的所有参数,那么它更有用,因为
$0
不包括在其中。我认为不同的shell在命令后对参数的处理方式上也可能有所不同。我记得看到过一种风格,人们编写
-exec sh-c“command”{}{}
,因为有些shell使用第一个参数,有些使用第二个参数。@shogekiha接受答案比向上投票要好。