web-dev-qa-db-ja.com

あるコマンドの出力を引数として別のコマンドに渡すにはどうすればよいですか?

同様の質問がありましたが、私はUnixに慣れていないため、状況が原因で答えが明確ではありませんでした。私がやりたいのは、あるコマンドの出力を引数として別のコマンドに渡すことです。私はソース管理にgitを使用しており、3つの異なるブランチで作業しています。

コミットする必要があるときはいつでも、ブランチをチェックしてから、対応するコマンドを次のように指定する必要があります。

git pull --rebase Origin <branch-name>

エイリアスをgit-rebaseとして記述したかったのですが、最初にgit branchを実行します。

Gitブランチの出力は次のようになります

experiment
*master
new feature

したがって、マスターブランチに加えて2つのブランチがある場合、すべてのブランチが表示され、現在のブランチにスターマークが付けられます。星印の付いた線を抽出し、その出力を上記のコマンドに渡します。

また、コマンドgit branchの出力を抑制したいと思います。コマンド全体を入力するのが面倒なので、これを行っていませんが、unixbashの機能について詳しく知りたいからです。それから何かを学びたい

4
Sachin

まず、git branch出力を使用可能な形式にマッサージする必要があります

$ git branch
  experiment
* master
  new feature

$ git branch | awk '/^\* / { print $2 }'
master

ここで、それを引数として使用します。

$ git pull --rebase Origin $(git branch | awk '/^\* / { print $2 }')

(または、psusiの回答のようにバッククォートを使用できます)。

これshould大丈夫です。awkコマンドは常に正確に1行に一致する必要があり、ブランチ名にスペースを含めることはできないと思います。もっと複雑なことについては、おそらくそれを関数(またはスクリプト)にラップして、中間値のサニティチェックを実行できるようにします。

5
Useless

xargs コマンドもあります。

xargs - build and execute command lines from standard input

したがって、@ Uselessからの上記の回答は、次のように変換されます。

git branch | sed -ne 's/\*//p' | xargs git pull --rebase Origin
3
utopiabound

いくつかの方法があります。最も簡単なのは、バッククォートの置換です。

git pull --rebase Origin `git branch | sed -ne 's/\*//p'`
2
psusi