it-swarm-id.com

Bagaimana cara mengirimkan parameter ke alias?

Untuk skrip bash, saya bisa menggunakan "[email protected]" untuk mengakses argumen. Apa yang setara ketika saya menggunakan alias?

77
prosseek

Alias ​​adalah seperti perintah di mana semua argumen mereka dilewatkan sebagai argumen untuk program yang mereka alias. Misalnya, jika Anda ingin alias ls ke ls -la, lalu mengetik ls foo bar akan sungguh 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 "[email protected]"
}
54
amphetamachine

solusi Alias

Jika Anda benar-benar menentang penggunaan fungsi, Anda dapat menggunakan:

$ alias wrap_args='f(){ echo before "[email protected]" after;  unset -f f; }; f'
$ wrap_args x y z
before x y z after

Anda dapat mengganti [email protected] dengan $1 jika Anda hanya menginginkan argumen pertama.

Penjelasan

Ini menciptakan fungsi sementara f, yang meneruskan argumen.

Argumen Alias ​​hanya disahkan pada bagian akhir. Perhatikan bahwa f dipanggil di akhir alias.

unset -f menghapus definisi fungsi ketika alias dijalankan sehingga tidak hang setelah itu.

34
Tom Hale

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:

alias lsswp="ls -l | grep swp"

(contoh yang terinspirasi oleh pertanyaan ini ) ini akan selalu menggunakan output dari ls -l dilakukan dalam direktori current dan lakukan grep untuk itu - dengan menggunakan

lsswp/tmp /

akan setara dengan ls -l | grep swp /tmp/ dan tidak ls -l /tmp/ | grep swp.

Untuk semua keperluan di mana argumen harus digunakan di suatu tempat di tengah, orang perlu menggunakan function alih-alih alias.

19
rozcietrzewiacz

Anda tidak harus melakukan apa pun, sebenarnya; alias melakukan ini secara otomatis. Contohnya:

$ alias less="less -eirqM"
$ less foo.txt

Anda akan melihat halaman pertama foo.txt, dan less akan berhenti di EOF (-e), pencarian akan case-insensitive (-i), dll.

15
Warren Young

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:

$ alias tgz "tar cvf - \!:1 | gzip -9 > \!:2.tar.gz"

, di mana !:1 dan !:2 adalah parameter yang akan Anda berikan saat memanggil alias Anda.

Contoh penggunaan:

    $ ls
    clrcf.dat                             user_comment_2016.06.03_12:51:50.txt  user_comment_2016.06.03_12:54:48.txt
        TEST-wADM.tec                         user_comment_2016.06.03_12:52:04.txt  user_comment_2016.06.03_12:55:13.txt


    $ tgz user* out
    a user_comment_2016.06.03_12:51:50.txt 1K
a user_comment_2016.06.03_12:52:04.txt 1K
a user_comment_2016.06.03_12:54:48.txt 1K
a user_comment_2016.06.03_12:55:13.txt 1K

    $ ls out*
    out.tar.gz

Yang secara efektif berarti bahwa Anda menggunakan dua parameter yang Anda sisipkan di tempat sewenang-wenang dari perintah tar, menjadikan semuanya sebagai alias tgz

1
stevica