Bạn làm điều này giống như cách bạn đặt bất kỳ bí danh nào.
alias git-go='git commit -m "init "; git push; git status'
Tình huống mà nó trở nên khó khăn không phải là khi một bí danh chạy một lệnh và chuyển các đối số cho lệnh đó, thậm chí khi một bí danh chạy nhiều lệnh cách nhau ;
, mà thay vào đó là khi bạn muốn một bí danh chấp nhận và sử dụng các đối số dòng lệnh của chính nó .
Ví dụ, bất cứ điều gì bạn viết sau tên của bí danh đó sẽ được dán vào cuối, và do đó được chuyển dưới dạng đối số dòng git
lệnh cho lệnh thứ ba , sau đó git status
. (Thực sự không quá nhiều khi văn bản sau được dán vào cuối, cũng như văn bản sau được để riêng và tên bí danh được thay thế bằng định nghĩa của nó.)
Vì vậy, bạn có thể chạy bí danh của mình mà không cần đối số, hoạt động và lệnh cuối cùng là git status
:
git-go
Hoặc bạn có thể chạy nó với các đối số mà bạn muốn truyền vào git status
. Ví dụ: khi bạn chạy nó theo cách này, lệnh cuối cùng là git-status --show-stash
:
git-go --show-stash
Những gì bạn không thể làm với một bí danh trong Bash (và các shell kiểu Bourne khác) là làm cho bí danh chấp nhận các đối số dòng lệnh và đặt chúng ở nơi khác ngoài cuối.
Ví dụ: giả sử bạn muốn git-go
chấp nhận một đối số mà nó sử dụng cho thông điệp cam kết. Bạn sẽ không thể viết điều này như một bí danh. Giải pháp sẽ là viết nó dưới dạng hàm shell thay thế:
git-go() { git commit -m "$1"; git push; git status; }
Trong định nghĩa của hàm shell, các tham số vị trí $1
, $2
v.v ... giữ các giá trị của các đối số dòng lệnh được truyền cho hàm shell. Các bí danh không có chức năng tương ứng với điều này, bởi vì mở rộng bí danh thực sự là một hình thức xử lý macro, diễn ra từ rất sớm, khi shell phân tích một lệnh.
Tất nhiên, bạn có thể viết nó dưới dạng hàm shell ngay cả khi bạn không cần sử dụng các tham số vị trí trong định nghĩa, như Videonauth gợi ý .