Bagaimana cara menetapkan alias ke jalur terminal?

9

Saya ingin dengan mudah mengatur alias git-goke 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.

Philip Rego
sumber
Apa yang kamu coba? Pertanyaan lain apa yang Anda baca? askubuntu.com/q/17536/507051 menjelaskannya dengan cukup baik, apa sebenarnya pertanyaan Anda?
hidangan penutup
Masalah saya menggunakan tanda kutip ganda dan bukan tunggal untuk tanda kutip luar.
Philip Rego
Anda juga bisa melakukannya sebaliknya menggunakan tanda kutip ganda di luar dan tanda kutip tunggal di dalam.
Videonauth
3
Kemungkinan duplikat dari Bagaimana cara membuat alias Bash permanen?
Fabby

Jawaban:

13

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 gitperintah 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-gomenerima 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, $2dan 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 .

Eliah Kagan
sumber
1
Bahkan lebih baik: tempatkan skrip bernama git-godi PATH Anda dan git goakan berfungsi.
D. Ben Knoble
10

Anda dapat mendeklarasikannya sebagai fungsi dalam ~/.bash_aliasesfile Anda seperti:

git-go(){
    git commit -m "init "
    git push
    git status
}

atau Anda dapat membuat alias di file yang sama seperti:

alias git-go='git commit -m "init "; git push; git status'

Jangan lupa untuk membuka kembali terminal Anda atau sumber file ( . ~/.bash_aliases) setelah Anda mengubahnya.

Videonauth
sumber
1
Salah satu manfaat dari menulis fungsi shell alih-alih alias adalah bahwa seseorang tidak perlu mengutip sarang. Dengan demikian, jawaban ini membahas masalah utama OP yang ternyata lebih langsung daripada masalah saya.
Eliah Kagan
@ ElliKagan Keduanya baik-baik saja untuk pertanyaan itu meskipun pertanyaan Anda lebih lengkap. Senang melihatmu kembali.
Videonauth
4

Saat Anda berurusan dengan gitperintah, Anda mungkin juga ingin mengetahui sintaks untuk menambahkan alias terutama untuk git:

git config --global alias.go '!sh -c "git commit -m \"init\"; git push; git status"'

Ini akan menambahkan alias baru ke gitkonfigurasi lokal Anda (at ~/.gitconfig) dan memungkinkan Anda untuk menerbitkan

git go

ketika berada di dalam gitrepositori. Setiap kali Anda menjalankan git goshell dipanggil dan perintah git commit -m "init"; git push; git statusdilewatkan ke sana.

Lihat dokumentasi git untuk perincian lebih lanjut.

PerlDuck
sumber
3

Itu masalah mengutip. Saya sudah mencoba ini:

alias="git commit -m "init "; git push; git status"

Tetapi ada kesalahan ini:

bash: ; git push; git status: command not found

Saya mendapat kesalahan itu karena saya salah menggunakan kutipan bertingkat. Berikut sintaks yang benar:

alias='git commit -m "init "; git push; git status'

Atau:

alias="git commit -m 'init '; git push; git status"

Atau tanpa tanda kutip jika tidak ada spasi di pesan komit:

alias="git commit -m init; git push; git status"
Philip Rego
sumber
Terima kasih telah mengirimkan jawaban ini (karena jawaban saya dan Videonauth tidak terlalu fokus pada masalah penawaran). Karena penasaran, mengapa Anda ingin ruang tambahan di pesan komit Anda?
Eliah Kagan
Saya dulu secara manual menempelkan baris ini dan saya akan menambahkan pesan setelah spasi, tapi itu tidak masuk akal di sini jadi saya mengeluarkannya.
Philip Rego
1
Dalam hal ini, Anda tidak perlu mengutip init; shell memperlakukan 'init', "init"dan initsama. (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 mendefinisikan git-go() { git commit -m "init $1"; git push; git status; }(yang saya miliki dalam jawaban saya tetapi dengan "init $1"bukan hanya "$1").
Eliah Kagan
Terima kasih itulah yang ingin saya coba selanjutnya.
Philip Rego