私のエイリアスのほとんどは次の形式です。 alias p='pwd'
私git commit
はそれがするようにエイリアスしたいgit commit -v
ただし、スペースを含むエイリアスを作成しようとするとエラーが発生します。
$ alias 'git commit'='git commit -v'
-bash: alias: `git commit': invalid alias name
私のエイリアスのほとんどは次の形式です。 alias p='pwd'
私git commit
はそれがするようにエイリアスしたいgit commit -v
ただし、スペースを含むエイリアスを作成しようとするとエラーが発生します。
$ alias 'git commit'='git commit -v'
-bash: alias: `git commit': invalid alias name
回答:
あなたの質問に対する直接的な答えではありません(エイリアスは1つの単語にしかなれないため)が、git-config
代わりに使用する必要があります:
git config --global alias.civ commit -v
これにより、git civ
実行されるgitエイリアスが作成されますgit commit -v
。残念ながら、私の知る限り、既存のgitコマンドをaliasesでオーバーライドする方法はありません。ただし、代わりに使用する適切なエイリアス名をいつでも選択できます。
git
シェルスクリプトのほんの少しで、別名でコマンドを。(。!私はところで、批判としてこのコメントを投稿していないよ答えはあなたの後一年近く掲載されたことを私はちょうど人々はそれが役に立つかもしれませんことを期待して、それを掲示しています。)
スペースを含むコマンドについて話していますが、ここではコマンドがgit
あり、スペースはありません。
git commitコマンドを呼び出すには、それを書く必要があります
git\ commit ...
'git commit' ...
"git commit" ...
一般に、コマンドの名前にはスペースがありません。そのため、シェルでコマンドを呼び出すのは面倒なので、システムでそのようなコマンドを見つけることはないと思います。
csh、tcsh、またはzshは、上記のいずれかのエイリアスを許可しますが、bashまたはkshはエイリアスできません(ただし、pdkshでは許可されますが、使用は許可されません)。zshの場合:
alias "'git commit'=git commit -v"
'git commit' ...
なりますgit command
(として呼び出されたときにコマンドを'git command'
単一引用符()でのみ)のエイリアスをgit
持つコマンドcommit
と-v
引数を指定します。あなたが探していたものではありませんが、私は推測します。
コマンドのalias
エイリアスしかできないので、ここでエイリアスできるのはコマンドだけgit
で、引数のリストで「コミット」の後に「-v」を挿入するものにエイリアスする必要があります。@ jw013のソリューションを使用するのが最善ですが、何らかの理由でエイリアスを使用する代わりに、できない、またはできない場合は、関数を使用してジョブを実行できます。
git() {
if [ "$1" = commit ]; then
shift
set -- commit -v "$@"
fi
command git "$@"
}
Bashでは、空白を含むコマンドのエイリアスを作成できません。
ただし、回避策として.bashrcで次の関数を使用します。
sudo() { if [[ $@ == "pacman -Syu" ]]; then command pacup.sh; else command sudo "$@"; fi; }
仕組みは次のとおりです。まず、呼び出したいコマンドから始めます。私の場合、そうですsudo
。
次に、どのパラメーターを取るかを指定します。この場合、pacman -Syu
。
トリガーされた場合、どのコマンドを実行する必要がありますか?上記のステートメントでは、pacup.sh
です。
それ以外の場合、実行するコマンドは何ですかsudo $@
。$@
あなたが推測するように、コマンドが取るパラメータリストです。
したがって、特定の場合にコマンドを作成すると、次のようになります。
git() { if [[ $1 == "commit" ]]; then command git commit -v; else command git "$@"; fi; }
ただし、このソリューションは、空白を含むコマンドをエイリアスする場合のより一般的なケースです。
あなたの特定のケースでは、jw013のソリューションを使用してgitコマンドのエイリアスを使用することをお勧めしますgit-config
if [[ $1 == 'commit' ]]...
?$ @を展開すると、実際に保持したいコミットの引数が増える可能性があります。
各単純コマンドの最初の単語は、引用符で囲まれていない場合、エイリアスがあるかどうかが確認されます。その場合、その単語はエイリアスのテキストに置き換えられます。エイリアス名と置換テキストには、シェルメタキャラクターを含む有効なシェル入力を含めることができますが、エイリアス名に「=」を含めることはできません。
置換テキストの最初の単語はエイリアスがテストされますが、展開されるエイリアスと同じ単語は2回展開されません。これは、たとえばlsを "ls -F"にエイリアスでき、Bashは置換テキストを再帰的に展開しようとしないことを意味します。
そのため、最初の単語のみがチェックされるため、複数の単語を含むエイリアスを持つことはできません。で、このスーパーユーザーの質問、機能を使用して回避策が提供されます。
ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }
に適応させることができますgit
。
\ls
、のエイリアスをバイパスしls
ます。
[_!%,@]
)に一致する引用符で囲まれていない単語は展開されると述べています。zshのエイリアス '\ ls'やksh / dash / bash / zshのエイリアスのような拡張は禁止されていません。a-b
そうでなければ、単一のPOSIXシェルは存在しません。移植性のあるスクリプト(シェルではない)がそのようなエイリアスを使用するべきではないというだけです。
'git commit'
POSIXシェルでコマンド位置に書き込む場合、組み込みユーティリティ、関数、または外部コマンドを呼び出す必要があります。
正しい解決策は、推奨されるjw013のようなエイリアスを使用することですが、スペースでエイリアスを作成するには、エイリアスをネストできます。
たとえば、ローカルとリモートの両方でブランチを削除するエイリアスがありますが、ユーザーは常にブランチを指定する必要があります。
remrem = "!sh -c 'if [ $# -ne 1 ]; then git specBranch; else git push origin :$1 && git branch -d $1; fi' -"
#echoing aliases
specBranch = "!sh -c 'echo Specify branch please!'"
git config
ないために追加されたメモを参照してくださいgit-config