使用 xargs 运行多个命令

时间:2021-01-12 17:35:35

标签: linux bash xargs

使用 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

即缺少第一个预期参数。

我可能是一个工具,但想知道这是为什么。

3 个答案:

答案 0 :(得分:2)

您必须像这样将位置 0 处的一些虚拟值传递给 sh 脚本:

seq 1 5 | xargs -d $'\n' sh -c 'for arg do echo $arg; done' _
1
2
3
4
5

不将 _ 传递给 sh 脚本 1 作为 $0 传递,而 for arg 仅循环从位置 1 开始的位置参数。

答案 1 :(得分:2)

总而言之,您是要按行列出数字还是执行命令? 通常,在 bash 中使用以下命令。

seq 1 5 | xargs -n 1 -I {} echo {}

输出

1
2
3
4
5

答案 2 :(得分:0)

问题在于您的内联 bash 代码。

seq 1 5 | xargs -n echo 产生想要的结果。它也可以简化为 seq 5 | xargs -n echo,因为 seq 假定范围从 1 开始。