команда git alias to shell не может правильно раскрыть $ @ - PullRequest
0 голосов
/ 20 сентября 2018

Мы можем определить git alias для запуска команд оболочки следующим образом:

[alias]
    echo = !echo
    echo2 = !echo "$1" && echo "====" && echo "${@:2}" && :

(последний && : используется, потому что аргументы командной строки снова добавляются в команду git, а : превращает их в no-op.)

Теперь мой вопрос как git запускает эти команды .Он запускает оболочку (например, sh) для ее запуска?

Я пробовал описанный выше псевдоним на двух компьютерах, одном ubuntu и одном centosubuntu echo2 не удается развернуть параметр ${@:2}, который в bash расширяется до аргументов, начиная со второго до конца списка.

Я предполагаю, что в ubuntu sh используется, но sh является ссылкой на dash.К сожалению dash не знает ${@:2}centos sh связан с bash и он работает.

Можем ли мы выбрать способ оболочки, используемой для запуска этих псевдонимов?

1 Ответ

0 голосов
/ 20 сентября 2018

Теперь мой вопрос: как git запускает эти команды?Он запускает оболочку (например, sh) для запуска?

Да.Он работает /bin/sh.См. https://stackoverflow.com/a/39445884/7976758

Не удается развернуть параметр $ {@: 2}

Для запуска псевдонимов с параметрами существует 2 способа: использовать другой уровень оболочки или использоватьфункции оболочки.Примеры:

[alias]
    echo3 = !bash -c 'echo "$0" && echo "====" && echo "${@:1}"'
    echo4 = !"f() { echo \"$1\" && echo \"====\" && echo \"${@:2}\"; }; f"

Псевдоним echo4 объявляет функцию и запускает ее.Последний f запускает функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...