Как передать параметры из псевдонима git во внешний скрипт - PullRequest
2 голосов
/ 14 марта 2019

У меня проблема с передачей параметров во внешний файл сценария bash из псевдонимов git. В настоящее время мой файл сценария bash находится в том же каталоге, что и мой .gitconfig. Я планирую переместить туда все мои complex !f() { } псевдонимы, чтобы избежать борьбы со всеми побегами и без комментариев.

Итак, мой файл сценария называется .gitconfig.kat.aliases.script и выглядит примерно так:

#!/bin/bash

openInBrowser() {
    REPO_URL=$(git config remote.origin.url)

    find="git@bitbucket.org:"
    replace="https://bitbucket.org/"

    # Replace SSH with HTTPS prefix
    REPO_URL=$(echo $REPO_URL | sed -e "s%${find}%${replace}%g")
    explorer $REPO_URL

    exit 0;
}

checkoutRemoteBranch() {
    echo "$# Parameters"
    echo $0
    echo $1
    echo $2
    if [ "$#" = 2 ] 
    then
        echo -e "BINGO"
        # git fetch
        # git co -b $2 $1/$2
    else
        echo -e "usage:\tgit co-rb <origin> <branch>"
    fi  
}

Конфигурация 1

В моем разделе .gitconfig [alias] у меня есть это:

co-rb = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && checkoutRemoteBranch \"$@\"'
open = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && openInBrowser'  

Я следовал синтаксис этого вопроса для псевдонимов к внешнему сценарию / функции. Затем я следовал синтаксису этого вопроса для передачи параметров в функцию (выше псевдоним не передает фиктивный параметр, как предложенный вопрос, подробнее ниже).

Проблема в том, что без фиктивного параметра, когда я выполняю git co-rb origin feature/test, я получаю следующий вывод:

1 Parameters
origin
feature/test

Конфигурация 2

Если я определю фиктивный параметр после $ @ ...

co-rb = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && checkoutRemoteBranch \"$@\" x'

Вывод:

2 Parameters
origin
feature/test
x

Конфигурация 3

Если я изменю положение фиктивного параметра на co-rb = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && checkoutRemoteBranch x \"$@\"'

Вывод:

2 Parameters
origin
x
feature/test

Вопросы: 1. Конфигурация 1 - неправильный счетчик параметров, а позиционные параметры смещены на -1. 1. Конфигурация 2 - счетчик параметров правильный, но позиционные параметры смещены на -1. 1. Конфигурация 3 - счетчик параметров правильный, но все параметры перепутаны. x вводится посередине, и позиции не корректны для $ 1.

Как мне настроить псевдоним git, чтобы количество параметров было правильным, а позиции 1..N - это то, что я ожидал? Или я должен изменить свой сценарий оболочки так, чтобы каждый раз, когда я проверял количество параметров, я проверял счет 'count-1'?

1 Ответ

0 голосов
/ 14 марта 2019
$ bash -c 'echo $@' 1 2 3
2 3

$ bash -c 'echo $0 $@' 1 2 3
1 2 3

То есть "$@" передает параметры, начатые с 1-го, но в этом Ситуация там также 0-й параметр.

Итак, пройдите $0:

co-rb = !bash -c 'source $HOME/.gitconfig.kat.aliases.script && checkoutRemoteBranch "$0" "$@"'

$0 не добавляется к $@, поскольку в 99 случаях использования из 100 оно не требуется. Обычно это имя оболочки или имя скрипта, ни один из них не нужен в $@.

...