Bash
將多行 STDIN 輸入饋送到命令
我有一個輸出 git 儲存庫 SSH URL 的腳本,如下所示:
git@example.com:namespace/project.git git@example.com:another_namespace/some_other_project.git
我想
git clone
為每一行執行命令(或其他命令)。我嘗試將其通過管道傳輸到
xargs
,但我要麼在一行中獲得輸出,要麼將多行輸入轉儲到單個命令中。如何通過管道在每一行上執行任意命令?
事實證明,您只需使用
while
bash 中的循環即可執行此操作(改編自此答案):<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 '{}'
)。