Пользовательские команды Git из PATH не работают

Пользовательские команды Git из PATH не работают

У меня есть ~/bin/git-continueскрипт ~/bin/git-abort, который выглядит так:

#!/bin/bash

repo_path=$(git rev-parse --git-dir)

if [ $? -ne 0 ]; then
    exit $?
fi

if [ -d "${repo_path}/rebase-merge" ]; then
    git rebase --continue
elif [ -d "${repo_path}/rebase-apply" ]; then
    git rebase --continue
elif [ -f "${repo_path}/MERGE_HEAD" ]; then
    git merge --continue
elif [ -f "${repo_path}/CHERRY_PICK_HEAD" ]; then
    git cherry-pick --continue
elif [ -f "${repo_path}/REVERT_HEAD" ]; then
    git revert --continue
else
    echo "No something in progress?"
fi

~/binЯ также установил каталог, PATHуказав это ~/.bashrc:

[[ ":$PATH:" != *":~/bin:"* ]] && PATH="~/bin:${PATH}"
export PATH

Итак, я проверил, все $ git-continueработает нормально, но git continueвыдает следующую ошибку: git: 'continue' is not a git command. See 'git --help'.

Какую возможную причину этой ошибки можно найти?

решение1

Ваш PATHсодержит нераскрытый ~/bin. Ваша оболочка понимает, что ~/означает, но, gitпо-видимому, нет. Вам следует включить полный путь к ~/binв ваш PATH.

Если бы вы использовали PATH=~/"bin:${PATH}"вместо PATH="~/bin:${PATH}", произошло бы расширение тильды и PATHсохранило бы расширенный путь. Но есть проблема с :~/bin:внутри [[ ]]. Отсутствие кавычек тильды — не единственное условие (см. «Раскрытие тильды» в man 1 bash), это :~/bin:затрудняет расширение. И вам нужно расширить его для проверки на полный путь в PATH.

Использовать проще $HOME:

[[ ":$PATH:" != *":$HOME/bin:"* ]] && PATH="$HOME/bin:${PATH}"
export PATH

$HOMEрасширяется до того, как вся строка будет назначена переменной PATH. Это означает, PATHчто теперь содержитполныйпуть к вашему $HOME/bin. gitпоймет этот путь.

решение2

Вы могли бы создатьпользовательский псевдонимчтобы обойти это. Использование псевдонима может быть предпочтительнее, поскольку так будет проще отлаживать код для того, кто не знает о вашей настройке, и вы в данный момент ничего не обрабатываете в своей команде, а просто хотите запустить ряд команд.

Смотрите такжеКак встроить скрипт bash непосредственно в псевдоним gitна StackOverflow.

Для тех, кому интересно, похоже, что единственная документация по этому поведению на данный момент находится висточниксогласноТАКОЙ вопросипроблема с git-scm.

Связанный контент