使用 xargs 到 运行 多个命令
Using xargs to run multiple commands
以this post为起点我是运行以下bash:
seq 1 5 | xargs -d $'\n' sh -c 'for arg do echo $arg; done'
预期输出
1
2
3
4
5
实际产量
2
3
4
5
即缺少第一个预期参数。
我可能是一个工具,但想知道为什么会这样。
问题在于您的内联 bash 代码。
seq 1 5 | xargs -n echo
生成所需的结果。它也可以简化为 seq 5 | xargs -n echo
因为 seq
假定范围从 1 开始。
你必须将位置 0 的一些虚拟值传递给 sh
脚本,如下所示:
seq 1 5 | xargs -d $'\n' sh -c 'for arg do echo $arg; done' _
1
2
3
4
5
不将 _
传递给 sh
,脚本 1
将作为 [=15=]
传递,而 for arg
循环遍历从位置 1
开始的位置参数只有.
总之,你是想列出数字还是逐行执行命令?
通常,在 bash.
中使用以下命令
seq 1 5 | xargs -n 1 -I {} echo {}
输出
1
2
3
4
5
以this post为起点我是运行以下bash:
seq 1 5 | xargs -d $'\n' sh -c 'for arg do echo $arg; done'
预期输出
1
2
3
4
5
实际产量
2
3
4
5
即缺少第一个预期参数。
我可能是一个工具,但想知道为什么会这样。
问题在于您的内联 bash 代码。
seq 1 5 | xargs -n echo
生成所需的结果。它也可以简化为 seq 5 | xargs -n echo
因为 seq
假定范围从 1 开始。
你必须将位置 0 的一些虚拟值传递给 sh
脚本,如下所示:
seq 1 5 | xargs -d $'\n' sh -c 'for arg do echo $arg; done' _
1
2
3
4
5
不将 _
传递给 sh
,脚本 1
将作为 [=15=]
传递,而 for arg
循环遍历从位置 1
开始的位置参数只有.
总之,你是想列出数字还是逐行执行命令? 通常,在 bash.
中使用以下命令seq 1 5 | xargs -n 1 -I {} echo {}
输出
1
2
3
4
5