Alias ​​ZSH dengan parameter


94

Saya mencoba membuat alias dengan parameter untuk git add / commit / push saya yang sederhana.

Saya telah melihat Fungsi dapat digunakan sebagai alias jadi saya mencoba tetapi saya tidak membuatnya ..

sebelum saya memiliki:

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

Tetapi saya ingin dapat mengubah komit saya:

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

(saya tahu ini adalah praktik git yang buruk)

Jawaban:


113

Anda tidak dapat membuat alias dengan argumen *, itu harus berupa fungsi. Fungsi Anda sudah dekat, Anda hanya perlu mengutip argumen tertentu sebagai ganti seluruh perintah, dan menambahkan spasi di dalam [].

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

*: Sebagian besar shell tidak mengizinkan argumen dalam alias, saya yakin csh dan turunannya mengizinkan, tetapi Anda tidak boleh menggunakannya .


cshtidak, tetapi tidak memiliki fungsi sama sekali. (Saya tidak tahu apakah tidak ada fungsi karena alias dapat mengambil parameter, atau jika alias mengambil parameter karena tidak ada fungsi, atau apa.)
chepner

Jadi Anda akan menyebutnya (dari shell) seperti gitall "my commit message"? atau Anda akan menyebutnyagitall('my commit message')
archae0pteryx

Fungsi @ archae0pteryx dipanggil persis seperti perintah lainnya, jadi gitall "my commit message".
Kevin

Saya akan menyarankan getall() {tanpa sebelumnya function- tentu, itu legal di zsh, tetapi satu-satunya perubahan itu akan membuat ini kompatibel dengan semua shell yang sesuai dengan POSIX.
Charles Duffy

9
BTW, jika Anda menggunakan git commit -m "${1:-update}"(perluasan parameter dengan default disediakan), maka Anda tidak memerlukan ifpernyataan itu sama sekali.
Charles Duffy

104

Jika Anda benar-benar perlu menggunakan alias dengan parameter karena suatu alasan, Anda dapat meretasnya dengan menyematkan fungsi di alias Anda dan segera menjalankannya:

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

Saya melihat pendekatan ini banyak digunakan dalam alias .gitconfig.


7
Sangat menarik namun sangat indah
rococo

14
Mengapa membuat alias? Panggil saja fungsinya example.
tripleee

1
Juga, terlambat, Anda membutuhkan titik koma sebelum kurung kurawal tutup.
tripleee

Ini sangat indah. Dengan ini saya bisa membuat alias yang menambahkan alias ke file rc, lalu memuat ulang file rc tersebut. ❤️ alias addalias = 'f () {echo "alias" $ 1 >> ~ / .zshrc &&. ~ / .zshrc}; f '
MayTheSForceBeWithYou

5
tidak perlu menambahkan nama apa pun ke dalam cakupan global, cukup gunakan fungsi anonim:alias example='(){ echo Your arg was $1. ;}'
maoizm

10

Saya menggunakan fungsi ini di file .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
}

Di sini git push origin HEADbertanggung jawab untuk mendorong cabang Anda saat ini di jarak jauh.

Dari command prompt jalankan perintah ini: gitall "commit message goes here"

Jika kita hanya menjalankan gitalltanpa pesan komit maka pesan komit akan updateseperti fungsinya.


4

"git add ."dan perintah lain di antara "hanyalah string untuk bash, hapus "s.

Anda mungkin ingin menggunakannya [ -n "$1" ]sebagai gantinya di tubuh if Anda.


0

Saya mencoba jawaban yang diterima (Kevin) tetapi mendapatkan kesalahan berikut

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

Karenanya mengubah sintaks ini, berdasarkan masalah git dan itu berhasil.

    function gitall {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
    }
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.