2016-03-14 4 views
1

Это, вероятно, глупая ошибка. Я использую this as a basis for a bash function, чтобы попытаться создать Баш скрипт для this git function:Bash scripting git branch lists

branch() { 
    if [[ [email protected] == "-r" ]]; then 
     command for k in `git branch -r | perl -pe 's/^..(.*?)(->.*)?$/\1/'`; do echo -e `git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1`\\t$k; done | sort -r 

else 
     command for k in `git branch | perl -pe s/^..//`; do echo -e `git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $k -- | head -n 1`\\t$k; done | sort -r 

    fi 
} 

Когда я пытаюсь источник этого, он на самом деле пытается выполнить команды - и затем дает синтаксическую ошибку из-за этого.

Я могу выполнить команды локально, так что я явно не вижу ничего очевидного в создании моей функции здесь.

+0

В вашей статье еще, что апостроф перед командой мерзавца должен быть обратно клещ: 'к в«git' становится 'к в \ 'git'. – bishop

+0

Изменение @bishop, что приводит к тем же результатам. – enderland

+1

'command' использует команду' command [-pVv] [arg ...] '. Это не то, что даст вам цикл 'for'. Вы хотите запустить команду несколько раз? Если это так, поместите 'command' внутри' for'. В качестве предложения удалите команду и посмотрите, что произойдет. – bishop

ответ

0

После некоторого упрощения и удаления паразитного command:

branch() { 
    local options="" 
    local pattern="s/^..//" 
    if [[ [email protected] == "-r" ]]; then 
     options="-r" 
     pattern="s/^..(.*?)(->.*)?$/\1/" 
    fi 
    git branch $options | perl -pe "$pattern" | while IFS= read -r k; do 
     branch_format $k 
    done | sort -r 
} 
branch_format() { 
    echo -e $(git show --pretty=format:"%Cgreen%ci %Cblue%cr%Creset" $1 -- | head -n 1) $1 
} 
+0

Я бы предложил 'printf '% s \ t% s \ n" "$ (git show ...)" "$ k" ' –

+0

Дал мне достаточно оснований, чтобы выяснить, что Мне нужно было сделать, спасибо (я отредактировал его, включив в него мою работу)! – enderland

+0

Добро пожаловать. Я сделал аналогичные изменения, рефакторинг для версии, которая более эффективна в примечании @glennjackman о 'for' итерации. Бонус, используйте 'branch_format $ branch_name', чтобы получить форматированную версию независимо от использования в' branch'. – bishop