Bash alias dengan spasi sebagai bagian dari perintah


11

Saya mencoba membuat alias bash, di mana alias itu sendiri memiliki spasi di dalamnya.

Idenya adalah alias (yaitu con) singkatan sudo openvpn --config /path/to/my/openvpn/configs/. Yang menghasilkan perintah yang dapat dibaca, ketika conalias digunakan.

yaitu: `con uk.conf` == `sudo openvpn --config /path/to/my/openvpn/configs/uk.conf`

Saya memahami bahwa saya tidak dapat mendeklarasikan alias seperti ini: con ="sudo openvpn --config /path/to/my/openvpn/configs/". Apakah fungsi bash berfungsi dalam skenario ini? Saya belum pernah mendengarnya, tetapi ketika meneliti solusi untuk masalah kecil ini.

Jawaban:


12

Ya, Anda harus menggunakan suatu fungsi. Alias ​​akan berfungsi jika Anda ingin menambahkan parameter, argumen apa pun yang diberikan kepada alias dilewatkan sebagai argumen untuk program alias tetapi sebagai parameter terpisah , tidak hanya ditambahkan ke apa yang ada. Menggambarkan:

$ alias foo='echo bar'
$ foo
bar
$ foo baz
bar baz

Seperti yang Anda lihat, apa yang digaungkan adalah bar bazdan tidak barbaz. Karena Anda ingin menggabungkan nilai yang Anda berikan ke parameter yang ada, Anda akan membutuhkan sesuatu seperti:

function com(){ sudo openvpn --config /path/to/my/openvpn/configs/"$@"; }

Tambahkan baris di atas untuk Anda ~/.bashrcdan Anda siap untuk pergi.


4
Anda dapat menggunakan "$@"alih-alih "$1"agar argumen selanjutnya dilewatkan juga. (Komentar umum, mungkin tidak relevan dengan kasus khusus di sini)
Toby Speight

@TobySpeight D'oh! Aku seharusnya memikirkan itu. Terima kasih sudah diedit.
terdon

1
@TobySpeight hanya untuk klarifikasi, apakah itu artinya com uk.conf -something elsediterjemahkan sudo openvpn --config /path/to/my/openvpn/configs/uk.conf -something else?
TMH

4
@ Tom ya. $@berisi semua parameter yang diberikan. Lihat Apa perbedaan antara $ * dan $ @? .
terdon
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.