Git параметры добавления псевдонимов для завершения

Я использую Git Bash v1.8.1, с несколькими псевдонимами (для тестирования):

[alias]
    ekko = !echo $1 && echo $1
    ekko2 = !sh -c 'echo $1 && echo $1'

Но когда я запускаю их, я вижу:

> git ekko master
master
master master

и

> git ekko2 master
(blank line) 
(blank line) 

Мое предназначение:

> git ekko master
master
master

Я новичок в псевдонимах - я ищу способ убедиться, что мои аргументы полностью поглощены, а не добавлены к концу псевдонима. Некоторые слежки показывают, что это поведение изменилось где-то около Git v1.7.x, и я еще не определил, как это сделать:

Git Псевдоним - несколько команд и параметров

Ответ 1

Ваш псевдоним ekko2 действительно близок... Что вам действительно нужно, так это:

[alias]
    ekko2 = !sh -c 'echo $1 && echo $1' -

Git псевдонимы, которые выполняют команды оболочки, заменяют переменные $n, но также добавляют любые аргументы, которые вы передаете им в конце команды. Поэтому в вашем первом примере git ekko master эквивалентен echo master && echo master master, что объясняет его вывод.

Второй пример ближе, но вы передаете "master" команде sh, которая просто игнорирует дополнительный аргумент. Добавив - в конец псевдонима, вы сообщаете sh, что следующие аргументы предназначены для script sh, а не для sh.

Ответ 3

Вы можете добавить команду Bash noop ":" в конце:

git config --global alias.hello-world '!echo "$1"; :'

Печать

$ git hello-world hello world
hello world