web-dev-qa-db-ja.com

コマンドへのマルチラインSTDIN入力の供給

次のようなgitリポジトリのSSH URLを出力するスクリプトがあります。

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

コマンドgit clone(または他のコマンド)を各行に対して実行したい。

xargsにパイピングしてみましたが、出力を1行で取得するか、複数行の入力を1つのコマンドにダンプしました。

どのようにパイプを介して各行で任意のコマンドを実行しますか?

4
Robert Dundon

結局のところ、bashでwhileループを使用するだけでこれを行うことができます( this answer から変更):

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

ここで、echoはコマンドであり、$line各行の出力として、必要に応じて調整できます。

3
Robert Dundon

ええ、それは少しトリッキーですが、この例を紹介しましょう:

これがテストデータです

$ 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 '{}')を指示してみてください。

1
Pavel