パラメータ付きのZSHエイリアス


98

単純なgitadd / commit / pushのパラメーターを使用してエイリアスを作成しようとしています。

関数をエイリアスとして使用できるのを見たので、試してみましたが、作成しませんでした。

私が持っていた前に:

alias gitall="git add . ; git commit -m 'update' ; git push"

しかし、私は自分のコミットを変更できるようにしたいです:

function gitall() {
    "git add ."
    if [$1 != ""]
        "git commit -m $1"
    else
        "git commit -m 'update'"
    fi
    "git push"
}

(私はそれがひどいgitプラクティスであることを知っています)

回答:


116

引数*でエイリアスを作成することはできません。関数である必要があります。関数は閉じています。コマンド全体ではなく特定の引数を引用符で囲み、内にスペースを追加するだけです[]

gitall() {
    git add .
    if [ "$1" != "" ] # or better, if [ -n "$1" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
}

*:ほとんどのシェルはエイリアスでの引数を許可していません。cshと派生物は許可していると思いますが、とにかくそれらを使用するべきではありません


cshありますが、機能はまったくありません。(エイリアスがパラメータをとることができるために関数がないのか、関数がないためにエイリアスがパラメータをとるのか、などはわかりません。)
chepner 2015

だからあなたはそれを(シェルから)次のように呼ぶでしょうgitall "my commit message"?またはあなたはそれを呼びますかgitall('my commit message')
archae0pteryx 2017

@ archae0pteryx関数は、他のコマンドとまったく同じように呼び出されるため、gitall "my commit message"
ケビン

getall() {上記なしでお勧めしますfunction-確かに、zshではどちらの方法でも合法ですが、その唯一の変更により、これはすべてのPOSIX準拠のシェルと互換性があります。
チャールズ・ダフィー

9
ところで、git commit -m "${1:-update}"(デフォルトが提供されているパラメーター展開)を使用した場合は、ifステートメントはまったく必要ありません。
チャールズ・ダフィー

108

何らかの理由で本当にパラメータ付きのエイリアスを使用する必要がある場合は、エイリアスに関数を埋め込み、すぐに実行することで、エイリアスをハックできます。

alias example='f() { echo Your arg was $1. };f'

このアプローチは.gitconfigエイリアスで多く使用されているようです。


7
とてもハッキーでありながらとても美しい
rococo 2017年

14
なぜエイリアスを作成するのですか?関数を呼び出すだけexampleです。
トリプリー2018年

1
また、遅ればせながら、閉じ中括弧の前にセミコロンが必要です。
トリプリー2018年

これは美しかった。これにより、rcファイルにエイリアスを追加するエイリアスを作成し、そのrcファイルをリロードすることができました。❤️aliasaddalias= 'f(){echo "alias" $ 1 >>〜/ .zshrc &&。〜/ .zshrc}; f'
MayTheSForceBeWithYou20年

6
グローバルスコープに名前を追加する必要はありません。匿名関数を使用するだけです。alias example='(){ echo Your arg was $1. ;}'
maoizm20年

11

私はこの関数を.zshrcファイルで使用しました:

function gitall() {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update # default commit message is `update`
    fi # closing statement of if-else block
    git push origin HEAD
}

ここでgit push origin HEADは、現在のブランチをリモートにプッシュする責任があります。

コマンドプロンプトから次のコマンドを実行します。 gitall "commit message goes here"

gitallコミットメッセージなしで実行した場合、コミットメッセージはupdate関数が言ったとおりになります。


4

"git add ."間にある他のコマンドは"bashの単なる文字列であり、"sを削除します。

[ -n "$1" ]代わりにif本体で使用することをお勧めします。


0

受け入れられた答え(Kevin's)を試しましたが、次のエラーが発生していました

defining function based on alias `gitall'
parse error near `()'

したがって、gitの問題に基づいて構文をこれに変更し、機能しました。

    function gitall {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
    }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.