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

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

同様の質問が以前にありましたが、私は初心者なので、Unix文脈上、回答が明確ではありませんでした。私がやりたいのは、あるコマンドの出力を別のコマンドの引数として渡すことです。私はソース管理に git を使用しており、3 つの異なるブランチで作業しています。

コミットする必要があるときはいつでも、ブランチをチェックして、対応するコマンドを実行する必要があります。

git pull --rebase origin <branch-name>

エイリアスを として記述したいのですgit-rebaseが、まず が実行されますgit branch

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

experiment
*master
new feature

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

また、コマンドの出力を抑制したいと思いますgit branch。コマンド全体を入力するのが面倒だからではなく、Unix bashのパワーについてもっと知りたいからです。そこから何かを学べることを願っています

答え1

git branchまず、出力を使用可能な形式に調整する必要があります

$ git branch
  experiment
* master
  new feature

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

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

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

(または、psusi の回答のようにバックティックを使用することもできます)。

これすべき大丈夫です。awk コマンドは常に 1 行に一致するはずですし、ブランチ名にスペースを含めることはできないと思います。もっと複雑な場合は、関数 (またはスクリプト) にラップして、中間値の妥当性チェックを行うとよいでしょう。

答え2

また、xargs指示。

xargs - build and execute command lines from standard input

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

git branch | sed -ne 's/\*//p' | xargs git pull --rebase origin

答え3

いくつかの方法があります。最も簡単な方法は、バックティック置換を使用することです。

git pull --rebase origin `git branch | sed -ne 's/\*//p'`

関連情報