Передача строки в позиционном параметре для псевдонима Git - PullRequest
0 голосов
/ 01 ноября 2018

Я пытаюсь создать псевдоним git, который принимает строку как полный позиционный параметр.

Например, У меня есть псевдоним:

my-alias = "!f() { \
     param1 = $1; \
     param2 = $2; \
     rem_param = ${@:3};\
     };f"

И я хочу использовать псевдоним как:

$ git my-alias abc "this is one parameter" 11 22 44

Здесь мои параметры должны быть

param1 = abc
param2 = "this is one parameter"
rem_pram = 11 22 44

При настройке я начинаю воспринимать каждое слово в строке как отдельный параметр. Таким образом, вопрос, есть ли способ рассматривать строку как один параметр?

1 Ответ

0 голосов
/ 01 ноября 2018

Когда вы запускаете псевдоним Git с !, это говорит Git вызвать оболочку для вашего псевдонима. По умолчанию оболочка расширяет слова пробелами, поэтому ваше назначение param2 состоит только из «this». Чтобы решить эту проблему, вам нужно заключить в кавычки ваши аргументы. Поскольку у вас уже есть двойные кавычки, вам нужно их избежать. Кроме того, чтобы иметь синтаксически допустимые назначения, вам также необходимо удалить пробелы вокруг знака равенства.

Итак, все будет выглядеть так:

my-alias = "!f() { \
    param1=\"$1\"; \
    param2=\"$2\"; \
    rem_param=\"${@:3}\"; \
};f"

Я должен также отметить, что поскольку Git всегда использует /bin/sh в качестве оболочки для псевдонимов (если она не была скомпилирована явно для другого), синтаксис ${@:3} будет работать только в системах, которые используют bash как /bin/sh. Этот псевдоним не работает в большинстве систем Debian и Ubuntu, где /bin/sh - тире.

...