2013-08-08 2 views
6

Я использую Git Bash V1.8.1, с несколькими псевдонимами (для тестирования):Git параметры псевдонима добавляющих для конечного

[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 

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

Git Alias - Multiple Commands and Parameters

ответ

10

Ваш ekko2 псевдоним очень близко ... То, что вы действительно хотите это:

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

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

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

+0

+1 и примите для объяснения. Благодаря! –

+2

Только для записи другим относительно распространенным способом достижения такого же результата является использование функции: 'ekko2 ="! F() {echo $ 1 && echo $ 1}; f "'. Это потенциально несколько более эффективно, так как это позволяет избежать наложения второй оболочки, я думаю ... – twalberg

+1

Для меня работает 'ekko2 ="! Echo $ 1; echo $ 2 # "'. '#' Подавляет остальную часть строки. – donquixote

1

Вы можете добавить Баш Nööp команду ":" в конце:

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

Отпечатки:

$ git hello-world hello world 
hello world 
Смежные вопросы