Как передать вывод одной команды в качестве аргумента другой?

Как передать вывод одной команды в качестве аргумента другой?

Похожий вопрос уже задавался, но поскольку я новичок, Unixответ не был мне ясен из-за контекста. Я хочу передать вывод одной команды в качестве аргумента другой. Я использую git для управления исходным кодом и работаю над тремя разными ветками.

Всякий раз, когда мне нужно сделать коммит, я должен проверить свою ветку, а затем дать соответствующую команду, как

git pull --rebase origin <branch-name>

Я хотел написать псевдоним git-rebase, который сначала будет выполнять git branch.

Вывод ветки git выглядит так

experiment
*master
new feature

Итак, если у нас есть две ветки в дополнение к главной ветке, то он покажет все ветки, а текущая ветка будет отмечена звездочкой. Я хочу извлечь строку, отмеченную звездочкой, а затем передать вывод этого в команду выше.

Также я хотел бы подавить вывод команды 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 всегда должна соответствовать ровно одной строке, и я предполагаю, что в именах веток не может быть пробелов. Для чего-то гораздо более сложного я бы, вероятно, обернул это в функцию (или скрипт), чтобы вы могли выполнить некоторую проверку промежуточных значений на вменяемость.

решение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'`

Связанный контент