Bash

將多行 STDIN 輸入饋送到命令

  • November 20, 2017

我有一個輸出 git 儲存庫 SSH URL 的腳本,如下所示:

git@example.com:namespace/project.git
git@example.com:another_namespace/some_other_project.git

我想git clone為每一行執行命令(或其他命令)。

我嘗試將其通過管道傳輸到xargs,但我要麼在一行中獲得輸出,要麼將多行輸入轉儲到單個命令中。

如何通過管道在每一行上執行任意命令?

事實證明,您只需使用whilebash 中的循環即可執行此操作(改編自此答案):

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

您的命令在哪裡echo$line用作每行的輸出,您可以根據需要進行調整。

是的,這有點棘手,但讓我給你看這個例子:

這是測試數據

$ 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 '{}')。

引用自:https://serverfault.com/questions/883640