Untuk skrip bash, saya dapat menggunakan "$@"
untuk mengakses argumen. Apa yang setara ketika saya menggunakan alias?
64
Alias adalah seperti perintah di mana semua argumen mereka dilewatkan sebagai argumen untuk program yang mereka alias. Misalnya, jika Anda adalah untuk alias ls
untuk ls -la
, kemudian mengetik ls foo bar
akan benar-benar mengeksekusi ls -la foo bar
pada baris perintah.
Jika Anda ingin memiliki kontrol aktual atas bagaimana argumen ditafsirkan, maka Anda bisa menulis fungsi seperti ini:
my_program_wrapper() {
local first_arg="$1" \
second_arg="$2"
shift 2 # get rid of the first two arguments
# ...
/path/to/my_program "$@"
}
sh
didefinisikanmy_program_wrapper() { ...; }
. Bash memang menangani kata kuncifunction
tetapi mengapa tidak menggunakan yang lebih portabel?Solusi Alias
Jika Anda benar-benar menentang penggunaan fungsi, Anda dapat menggunakan:
Anda dapat mengganti
$@
dengan$1
jika Anda hanya menginginkan argumen pertama.Penjelasan
Ini menciptakan fungsi sementara
f
, yang meneruskan argumen.Argumen Alias hanya disahkan pada bagian akhir. Catatan yang
f
disebut di paling akhir alias.The
unset -f
menghilangkan definisi fungsi sebagai alias dijalankan sehingga tidak berkeliaran setelah itu.sumber
wrap_args x y z
memberi saya: bash: kesalahan sintaksis dekat token yang tidak terduga `('f
alias. Setelah saya unaliasedf
itu berfungsi dengan baik. Tabrakan nama lama.command type f
:)Menambahkan ke jawaban sekarang, satu hal penting untuk disadari tentang bagaimana alias bekerja adalah bahwa semua parameter yang Anda ketikkan setelah perintah alias akan digunakan secara harfiah di akhir. Jadi tidak ada cara untuk menggunakan alias untuk dua perintah (disalurkan atau tidak), dari yang pertama harus menafsirkan parameter. Untuk memperjelasnya, inilah contoh sesuatu yang tidak akan berfungsi seperti yang diharapkan:
(contoh terinspirasi oleh pertanyaan ini ) ini akan selalu menggunakan output yang
ls -l
dilakukan di direktori saat ini dan melakukan grep pada itu - jadi menggunakanlsswp / tmp /
akan setara dengan
ls -l | grep swp /tmp/
dan tidakls -l /tmp/ | grep swp
.Untuk semua keperluan di mana argumen harus digunakan di suatu tempat di tengah, orang perlu menggunakan
function
bukanalias
.sumber
Anda tidak harus melakukan apa pun, sebenarnya; alias melakukan ini secara otomatis. Misalnya:
Anda akan melihat halaman pertama foo.txt, dan
less
akan berhenti di EOF (-e), pencarian akan case-sensitive (-i), dll.sumber
Saya menjawab untuk csh:
Ya, Anda dapat menggunakan parameter dalam alias dan - sebagai perbedaan dengan apa yang telah dikatakan di atas - Anda dapat merujuknya di mana saja dalam definisi alias - tidak hanya di bagian akhir.
Contoh untuk tar-gz -ing sesuatu:
, di mana
!:1
dan!:2
adalah parameter yang akan Anda berikan saat memanggil alias Anda.Contoh penggunaan:
Yang secara efektif berarti bahwa Anda menggunakan dua parameter yang Anda masukkan di tempat sewenang-wenang dari perintah tar, menjadikan semuanya sebagai alias
tgz
sumber