Использование псевдонимов 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
(или что угодно) по мере необходимости.