web-dev-qa-db-ja.com

どうすればgit [action]コマンド(スペースを含む)のエイリアスを作成できますか?

私のエイリアスのほとんどは次の形式です:alias p='pwd'

エイリアスしたいgit commitこうすることでgit commit -v

ただし、スペースを含むエイリアスを作成しようとすると、エラーが発生します。

$ alias 'git commit'='git commit -v'
-bash: alias: `git commit': invalid alias name
29
Michael Durrant

あなたの質問への直接の答えではありません(エイリアスは1つのWordにしかできないため)が、git-config代わりに:

git config --global alias.civ commit -v

これによりgitエイリアスが作成され、git civ実行git commit -v。残念ながら、私の知る限り 既存のgitコマンドをエイリアスで上書きする方法はありません 。ただし、代わりに、適切なエイリアス名をいつでも使用できます。

31
jw013

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; }

ただし、この解決策は、空白を含むコマンドにエイリアスを設定する場合のより一般的なケースです。
特定のケースでは、git-configを使用してgitコマンドにエイリアスを設定するためにjw013のソリューションを使用することをお勧めします

9
darnir

bash alias man page から

各シンプルコマンドの最初のワードは、引用符で囲まれていない場合は、エイリアスがあるかどうかが確認されます。その場合、そのWordはエイリアスのテキストで置き換えられます。エイリアス名と置換テキストには、シェルのメタ文字を含む有効なシェル入力を含めることができますが、エイリアス名に「=」を含めることはできません。

置換テキストの最初の単語はエイリアスについてテストされますが、展開されるエイリアスと同一の単語は2回目に展開されません。これは、たとえば、lsを "ls -F"にエイリアスすることができ、Bashが置換テキストを再帰的に拡張しようとしないことを意味します。

したがって、最初の単語のみがチェックされるため、複数の単語を含むエイリアスを作成することはできません。 このスーパーユーザーの質問 では、関数を使用した回避策が提供されています。

ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }

gitに適合させることができます。

4
Renan

正しい解決策は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!'" 
0
Do-do-new