Bí danh ZSH với tham số


94

Tôi đang cố tạo bí danh với tham số cho git add / commit / push đơn giản của mình.

Tôi đã thấy Hàm có thể được sử dụng làm bí danh nên tôi đã thử nhưng tôi không thành công ..

trước khi tôi có:

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

Nhưng tôi muốn có thể sửa đổi các cam kết của mình:

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

(tôi biết đó là một thực hành git khủng khiếp)

Câu trả lời:


113

Bạn không thể tạo bí danh với các đối số *, nó phải là một hàm. Hàm của bạn đóng, bạn chỉ cần trích dẫn một số đối số nhất định thay vì toàn bộ lệnh và thêm dấu cách bên trong [].

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

*: Hầu hết các shell không cho phép đối số trong bí danh, tôi tin rằng csh và các dẫn xuất thì có, nhưng bạn không nên sử dụng chúng .


cshnhưng nó không có chức năng gì cả. (Tôi không biết nếu không có chức năng vì bí danh có thể mất các thông số, hoặc nếu bí danh lấy thông số vì không có chức năng này, hoặc những gì.)
chepner

Vì vậy, bạn sẽ gọi nó (từ vỏ) như thế gitall "my commit message"nào? hoặc bạn sẽ gọi nógitall('my commit message')
archae0pteryx

Các chức năng của @chae0pteryx được gọi giống hệt như bất kỳ lệnh nào khác, vì vậy gitall "my commit message".
Kevin

Tôi muốn đề xuất getall() {mà không có phần trước function- chắc chắn, nó hợp pháp theo cách nào đó trong zsh, nhưng thay đổi duy nhất đó sẽ làm cho điều này tương thích với tất cả các trình bao tuân thủ POSIX.
Charles Duffy

9
BTW, nếu bạn đã sử dụng git commit -m "${1:-update}"(một mở rộng tham số với mặc định được cung cấp), thì bạn sẽ không cần ifcâu lệnh này.
Charles Duffy

104

Nếu bạn thực sự cần sử dụng bí danh có tham số vì lý do nào đó, bạn có thể hack nó bằng cách nhúng một hàm vào bí danh của mình và thực thi ngay lập tức:

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

Tôi thấy cách tiếp cận này được sử dụng rất nhiều trong bí danh .gitconfig.


7
Vì vậy, hacky nhưng rất đẹp
rococo

14
Tại sao lại tạo bí danh? Chỉ cần gọi hàm example.
tripleee

1
Ngoài ra, muộn hơn, bạn cần dấu chấm phẩy trước dấu ngoặc nhọn.
tripleee

Điều này thật đẹp. Với điều này, tôi đã có thể tạo một bí danh thêm bí danh vào tệp rc, sau đó tải lại tệp rc đã nói. ❤️ bí danh addalias = 'f () {echo "bí danh" $ 1 >> ~ / .zshrc &&. ~ / .zshrc}; f '
MayTheSForceBeWithYou

5
không cần thêm bất kỳ tên nào vào phạm vi toàn cầu, chỉ cần sử dụng chức năng ẩn danh:alias example='(){ echo Your arg was $1. ;}'
maoizm

10

Tôi đã sử dụng hàm này trong tệp .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
}

Ở đây git push origin HEADcó trách nhiệm đẩy chi nhánh hiện tại của bạn lên từ xa.

Từ dấu nhắc lệnh, hãy chạy lệnh này: gitall "commit message goes here"

Nếu chúng ta chỉ chạy gitallmà không có bất kỳ thông báo cam kết nào thì thông báo cam kết sẽ updategiống như hàm đã nói.


4

"git add ."và các lệnh khác giữa "chỉ là chuỗi cho bash, loại bỏ các "s.

Bạn có thể muốn sử dụng [ -n "$1" ]thay thế trong if body của mình.


0

Tôi đã thử câu trả lời được chấp nhận (của Kevin) nhưng gặp lỗi sau

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

Do đó đã thay đổi cú pháp thành này, dựa trên vấn đề git và nó đã hoạt động.

    function gitall {
    git add .
    if [ "$1" != "" ]
    then
        git commit -m "$1"
    else
        git commit -m update
    fi
    git push
    }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.