PATH からの Git カスタム コマンドが機能しない

PATH からの Git カスタム コマンドが機能しない

次のようなスクリプトが~/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のフルパスを含める必要があります。~/binPATH

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/bingitこのパスを理解します。

答え2

あなたは、カスタムエイリアスこれを回避するには、エイリアスを使用することをお勧めします。カスタマイズを認識していないユーザーや、現在コマンドで何も処理しておらず、一連のコマンドを実行したいだけの場合、デバッグが容易になるためです。

参照Gitエイリアス内にbashスクリプトを直接埋め込む方法StackOverflow で。

興味のある方のために、この動作に関する唯一のドキュメントは、現在ソースに従って質問ですそしてgit-scm の問題

関連情報