Псевдоним gitconfig с использованием !source не работает (zsh)

У меня есть такой gitconfig:

[alias]
l = "!source ~/.githelpers && pretty_git_log"

Когда я запускаю его, я получаю это:

[desktop] git l
source ~/.githelpers && pretty_git_log: 1: source: not found
error: cannot run source ~/.githelpers && pretty_git_log: No such file or directory
fatal: While expanding alias 'l': 'source ~/.githelpers && pretty_git_log': No such file or directory

Когда я добавляю любые другие встроенные оболочки для тестирования, они работают нормально:

[alias]
l = "!echo running from the builtin"

[desktop] git l
running from the builtin

Любая идея, почему исходную команду нельзя найти в git? Я запускаю zsh, но переход на bash, похоже, не имеет значения:

[desktop] bash
[desktop] git l
source ~/.githelpers && pretty_git_log: 1: source: not found
error: cannot run source ~/.githelpers && pretty_git_log: No such file or directory
fatal: While expanding alias 'l': 'source ~/.githelpers && pretty_git_log': No such file or directory

person user1244166    schedule 19.09.2012    source источник
comment
извините, если вопрос глупый, но зачем вам нужно добавлять source?   -  person CharlesB    schedule 19.09.2012
comment
На самом деле это пример из gitconfig Гэри Бернхардта, и в .githelpers у него есть функция под названием pretty_git_log(). Я предполагал, что исходный вызов сделает функцию pretty_git_log доступной в виде команды в командной строке, но не совсем уверен.   -  person user1244166    schedule 19.09.2012


Ответы (1)


Ошибка возникает из-за того, что конструкция !<command> пытается найти программу с таким именем для запуска. Есть программа /bin/echo (которая отличается от вашей оболочки, встроенной в echo, но это совсем другая история), но нет /bin/source (или /usr/bin, или любого другого места). По характеру того, что делает source, это не может быть отдельной программой.

Попробуйте это вместо этого:

[alias]
l = "!sh -c 'source ~/.githelpers && pretty_git_log'"

При необходимости измените sh на bash (или что-то еще).

person twalberg    schedule 19.09.2012
comment
Спасибо, это сработало. На самом деле я пробовал это с другими встроенными модулями, у которых не было двоичной версии (я так думал), и они также работали, но в любом случае ваш пример работал! Спасибо. - person user1244166; 19.09.2012
comment
l = !bash -c 'source ~/.githelpers && pretty_git_log' у меня сработало, спасибо! - person user2167582; 18.12.2016