gitを助けるためにいくつかの機能/エイリアスを作成したいのですが、.zshrc
方法がわかりません。
最初:
完全なコマンド:git commit -s -m "My message"
私が望む最終結果:gsc -m "My message"
第二:
完全なコマンド:git commit -s -a -m "My message"
私が望む最終結果:gsca "My message"
ご覧のとおり、私は部分引数を使用して何かを呼び出し、このマクロ呼び出しのソースに関係なく、他のすべての引数を受け入れることができるマクロが必要です。
私が試したこと:
function gsc() { git commit -s $@; }
alias gsc='git commit -s'
これらのどれも機能しません。
私のテスト:
> gsc -a -m "test"
On branch main
Your branch is up to date with 'origin/main'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
smth.txt
nothing added to commit but untracked files present (use "git add" to track
答え1
ここで:
function gsc() { git commit -s $@; }
使用引用しない $@
つまり、関数のすべての引数がトークン化されます。たとえば、呼び出しは、引数、、、および、つまりシェルコマンドラインの親を実行したかのように、コミットメッセージを別の引数に分割する必要がある項目として呼び出されgsc -m "hello there"
ます。git
commit
-s
-m
hello
there
git commit -s m hello there
拡張子を"$@"
。また、function foo
標準foo()
。だから:
gsc() { git commit -s "$@"; }
一方、エイリアスは
alias gsc='git commit -s'
動作しなければならないようです。エイリアスは構文解析される前にコマンドラインの内容のみを置き換えるので、それとまったくgsc -m "hello there"
同じでなければなりませんgit commit -s -m "hello there"
。
テスト時にエイリアスと関数の両方を定義していないことを確認したい場合があります。これは明らかに混乱を引き起こすでしょう。
答え2
お客様のソリューションは正しく、テストの結果、期待どおりに機能することがわかりました。短いコマンドの横にコマンド全体を入力し、同じ結果が得られることを確認すると、期待どおりに機能していることを確認できます。つまり、実行しgsc -a -m "test"
て「コミットに何も追加されていません」と表示された後、実行してgit commit -s -a -m "test"
同じように動作することを確認します。
関数の代わりにエイリアスを使用することをお勧めします。まず、オートコンプリートが機能するようにします。第二に、二重引用符の欠落などの一般的なエラー$@
(関数に存在するエラー)を防ぐことができますgsc
。