
Похожий вопрос уже задавался, но поскольку я новичок, 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'`