Самое простое, что нужно сделать (не входя в роль каждой новой строки при разборе этой команды), это просто передать символы новой строки как часть аргумента:
bash -c 'git for-each-ref --format="%(refname)" refs/heads/tags |
cut -d / -f 4 |
while read ref
do
git tag "$ref" "refs/heads/tags/$ref";
git branch -D "tags/$ref";
done
'
Тем не менее, единственное "важное"символ новой строки предшествует ключевому слову do
, и его также можно заменить точкой с запятой.
bash -c 'git for-each-ref --format="%(refname)" refs/heads/tags | cut -d / -f 4 | while read ref; do git tag "$ref" "refs/heads/tags/$ref"; git branch -D "tags/$ref"; done'
(прокрутите, чтобы увидеть всю команду. Обратите внимание, что исходные две точки с запятой были необязательными в мульти-линейная версия, но требуется в однострочной версии для завершения каждой команды в теле цикла.)
Однако только новый цикл должен выполняться новым экземпляром bash
;Вы также можете написать что-то вроде
git for-each-ref --format="%(refname)" refs/heads/tags |
cut -d / -f 4 |
bash -c 'while read ref
do
git tag "$ref" "refs/heads/tags/$ref";
git branch -D "tags/$ref";
done
'