LINUX.ORG.RU

Подскажите по bash-коммандам в алиасах гита

 , ,


1

1

На выходных решил прокачать свой гит конфиг (ссылка если кому интересно). а сегодня начал откатываться :)

было

cq = "!f() { git commit ./$GIT_PREFIX/$1 -m $1; }; f"

стало

cq = !git commit ./$GIT_PREFIX/$1 -m $1
но как оказалось этот вариант не пашет.

Гуру bash обьясните пожалуйста. Заодно если здесь есть что-либо не POSIX-совместимое дайте знать..

Спасибо

★★★★★

Ответ на: комментарий от ZuBB

Просто догадка(т.к. в первом примере они есть), говорю же в git не умею). Тогда заодно и

cq = "!git commit \"./$GIT_PREFIX/$1\" -m \"$1\""
не должно повредить.

salsa ()
Ответ на: комментарий от ZuBB

Потому что все выражение в кавычках, воспринимается как один аргумент. А когда ты берешь в кавычки несколько других слов, то это уже несколько аргументов. Если это алиас, то он умеет только в один аргумент, поэтому оно и работает.

joy4eg ★★★★★ ()
Ответ на: комментарий от ZuBB

Почекал еще, однако, все несколько иначе :)
Оказывается, git передает все параметры в конец команды:

	ss = "!f(){ echo; }; f"
	st = !echo

И далее уже shell их разбирает, как они есть. Ну а сами кавычки нужны, в примере выше, что бы git обработал алиас как единую команду, иначе оно останавливается на ;.
И мы получим что-то такое:
f(){ echo: 1: f(){ echo: Syntax error: end of file unexpected (expecting "}"

Резюмируя, можно сказать, что кавычки для
cq = "!git commit ./$GIT_PREFIX/$1 -m $1"

Нужны, потому что это будет обработана как единая команда (и, кстати, $1 в самом конце лишний). Как-то так.
ИМХО, лучше использовать вариант с функцией, потому что так мы явно будем контролировать какие параметры у нас есть и как их использовать.
git 1.9.1

joy4eg ★★★★★ ()
Ответ на: комментарий от joy4eg

Большое спасибо за обьяснения.

Если не возражаете буду Вас кастовать когда будут вопросы по bash.

ZuBB ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.