将多行 STDIN 输入馈送到命令

将多行 STDIN 输入馈送到命令

我有一个输出 git 存储库 SSH URL 的脚本,如下所示:

[email protected]:namespace/project.git
[email protected]:another_namespace/some_other_project.git

我想git clone为每一行运行命令(或其他命令)。

我尝试将其通过管道传输到xargs,但我要么在一行中得到输出,要么将多行输入转储到单个命令中。

如何通过管道在每一行上运行任意命令?

答案1

事实证明,您只需使用whilebash 中的循环即可完成此操作(改编自这个答案):

<whatever your command/output is> | while read line; do echo $line; done

您的命令在哪里echo并使用$line作为每行的输出,您可以根据需要进行调整。

答案2

是的,这有点棘手,但让我给你展示这个例子:

这是测试数据

$ cat a
1
2
3

以下是你尝试过的(我猜)

$ cat a | xargs echo foo
foo 1 2 3

使用方法如下xargs

$ cat a | xargs -I '{}' echo foo '{}'
foo 1
foo 2
foo 3

因此,不要仅仅通过管道将 URL 列表传输到xargs git clone,而是尝试定义占位符 ( -I '{}') 并告诉 xargs 如何处理它 ( git clone '{}')。

相关内容