Создание псевдонима git, содержащего подстановку команд bash и аргумент - PullRequest
0 голосов
/ 30 марта 2019

Получил это:

git diff $(git status -s | awk 'FNR == $LINE_NUM {print $2}')

... где номер строки - это вывод файла по состоянию.

Теперь я хочу создать псевдоним для этой командыв .gitconfig:

[alias]
diff-num = $WHAT_SHOULD_I_PUT_HERE?

Я хочу, чтобы этот псевдоним запускал команду diff команды git на основе аргумента номера строки, который я введу в командной строке.Я новичок в bash, и я не уверен, нужна ли мне функция bash для обработки этого или как передать аргумент в замененную команду.

Ответы [ 2 ]

1 голос
/ 30 марта 2019

Обычной формой для этого является использование обычного экранирования оболочки !, определение функции оболочки с произвольным именем и ее запуск, git предоставляет ее вашим аргументам.Один из моих goto's также lgdo,

git config alias.lgdo '!f() { git log --graph --decorate --oneline "${@---all}"; }; f'

, у меня есть gr и grl как git config --get-regexp {,--local} псевдонимы:

[alias]
        grl = "!f() { git config --local --get-regexp \"${@-.}\"; }; f"
        gr = "!f() { git config --get-regexp \"${@-.}\"; }; f"
1 голос
/ 30 марта 2019

ОК, все получилось. Git alias выглядит так:

diff-num = ! diff_num

Функция Bash это:

diff_num () {
    line=${1:-1}
    git diff $(git status -s | awk 'FNR == '$line' {print $2}')
}

Функция должна быть экспортирована с помощью следующей команды bash в вашем файле конфигурации bash:

export -f diff_num

...