Использование псевдонимов 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

1 ответ

Решение

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

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

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

+ Изменить sh в bash (или что угодно) по мере необходимости.

Другие вопросы по тегам