次のようなスクリプトが~/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
あなたは、カスタムエイリアスこれを回避するには、エイリアスを使用することをお勧めします。カスタマイズを認識していないユーザーや、現在コマンドで何も処理しておらず、一連のコマンドを実行したいだけの場合、デバッグが容易になるためです。
参照Gitエイリアス内にbashスクリプトを直接埋め込む方法StackOverflow で。
興味のある方のために、この動作に関する唯一のドキュメントは、現在ソースに従って質問ですそしてgit-scm の問題。