Saya ingin dengan mudah mengatur alias git-go
ke baris terminal ini:
git commit -m "init "; git push; git status
Jadi ketika saya memasukkan git-go, baris ini harus masuk.
Bagaimana saya bisa melakukan itu? Jawaban yang saya lihat hanya mencakup alias dari suatu perintah tanpa parameter. Tapi saya ingin mengatur alias ke jalur terminal yang arbitrer.
command-line
bash
alias
Philip Rego
sumber
sumber
Jawaban:
Anda melakukan ini dengan cara yang sama Anda akan mengatur alias apa pun.
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 , setelahgit 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
:Atau Anda dapat menjalankannya dengan argumen yang ingin Anda sampaikan
git status
. Misalnya, ketika Anda menjalankannya dengan cara ini, perintah terakhir adalahgit-status --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: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 .
sumber
git-go
di PATH Anda dangit go
akan berfungsi.Anda dapat mendeklarasikannya sebagai fungsi dalam
~/.bash_aliases
file Anda seperti:atau Anda dapat membuat alias di file yang sama seperti:
Jangan lupa untuk membuka kembali terminal Anda atau sumber file (
. ~/.bash_aliases
) setelah Anda mengubahnya.sumber
Saat Anda berurusan dengan
git
perintah, Anda mungkin juga ingin mengetahui sintaks untuk menambahkan alias terutama untukgit
:Ini akan menambahkan alias baru ke
git
konfigurasi lokal Anda (at~/.gitconfig
) dan memungkinkan Anda untuk menerbitkanketika berada di dalam
git
repositori. Setiap kali Anda menjalankangit go
shell dipanggil dan perintahgit commit -m "init"; git push; git status
dilewatkan ke sana.Lihat dokumentasi git untuk perincian lebih lanjut.
sumber
Itu masalah mengutip. Saya sudah mencoba ini:
Tetapi ada kesalahan ini:
Saya mendapat kesalahan itu karena saya salah menggunakan kutipan bertingkat. Berikut sintaks yang benar:
Atau:
Atau tanpa tanda kutip jika tidak ada spasi di pesan komit:
sumber
init
; shell memperlakukan'init'
,"init"
daninit
sama. (Jadi, Anda mungkin ingin mengembalikan versi asli dan juga menunjukkan versi baru, untuk mengilustrasikan situasi di mana kutipan bersarang diperlukan.) Adapun untuk dapat menambahkan sisa pesan, Anda bisa meneruskannya sebagai baris perintah argumen jika (seperti yang ditunjukkan dalam Videonauth dan jawaban saya) Anda mendefinisikan fungsi bukan alias. Misalnya, Anda bisa mendefinisikangit-go() { git commit -m "init $1"; git push; git status; }
(yang saya miliki dalam jawaban saya tetapi dengan"init $1"
bukan hanya"$1"
).