Anda melakukan ini dengan cara yang sama Anda akan mengatur alias apa pun.
alias git-go='git commit -m "init "; git push; git status'
Situasi di mana itu menjadi rumit bukan ketika alias menjalankan perintah dan meneruskan argumen ke perintah itu, atau bahkan ketika alias menjalankan beberapa perintah yang dipisahkan oleh ;
, tetapi sebaliknya adalah ketika Anda ingin alias menerima dan menggunakan argumen baris perintah sendiri .
Misalnya, apa pun yang Anda tulis setelah nama alias itu akan ditempelkan di akhir, dan dengan demikian diteruskan sebagai argumen baris perintah ke git
perintah ketiga , setelah git status
. (Sungguh bukan karena teks berikut ditempelkan di akhir, sebanyak teks berikut dibiarkan sendiri dan nama alias diganti dengan definisinya.)
Jadi, Anda dapat menjalankan alias Anda tanpa argumen, yang berfungsi, dan perintah terakhir adalah git status
:
git-go
Atau Anda dapat menjalankannya dengan argumen yang ingin Anda sampaikan git status
. Misalnya, ketika Anda menjalankannya dengan cara ini, perintah terakhir adalah git-status --show-stash
:
git-go --show-stash
Apa yang tidak bisa Anda lakukan dengan alias di Bash (dan shell gaya Bourne lainnya) adalah membuat alias menerima argumen baris perintah dan menempatkannya di tempat lain daripada di akhir.
Misalnya, Anda ingin git-go
menerima argumen yang digunakannya untuk pesan komit. Anda tidak akan dapat menulis ini sebagai alias. Solusinya adalah dengan menuliskannya sebagai fungsi shell sebagai gantinya:
git-go() { git commit -m "$1"; git push; git status; }
Dalam definisi fungsi shell, parameter posisi $1
, $2
dan sebagainya memegang nilai-nilai argumen baris perintah dilewatkan ke fungsi shell. Alias tidak memiliki fungsi yang sesuai dengan ini, karena ekspansi alias benar-benar merupakan bentuk pemrosesan makro, yang terjadi sangat awal, ketika shell mem-parsing perintah.
Anda dapat, tentu saja, menuliskannya sebagai fungsi shell bahkan jika Anda tidak perlu menggunakan parameter posisi dalam definisi, seperti yang disarankan Videonauth .