Mungkinkah membuat alias pasir?

8

Saya sedang mencari cara untuk membuat alias berikut ini berfungsi untuk nama file apa pun.

alias dim='cd /home/jason/Documents; vim *the desired file*; cd'

Saya bertanya-tanya apakah ada cara saya bisa mengubah alias ini untuk membuatnya sehingga saya bisa mengetikkan nama file apa pun seperti:

dim *the desired file*

Dan masih mendapatkan hasil yang sama. Pada dasarnya adakah cara untuk memanggil apa saja yang diketik setelah nama alias ke alias itu sendiri? Sesuatu seperti:

alias dim='cd /home/jason/Documents; vim <what is typed after alias>; cd'
Jason Basanese
sumber
//, apa tujuan dari ini?
Nathan Basanese

Jawaban:

8

Tidak, Anda tidak dapat melakukannya menggunakan alias shell. Anda harus menggunakan suatu fungsi.

Berikut adalah fungsi sederhana untuk melakukan pekerjaan:

dim() {
cd /home/jason/Documents
vim "$1"
cd
}

Fungsi dimakan mengambil nama file sebagai argumen. Anda dapat menempatkan potongan kode ini di akhir ~/.bashrcfile Anda dan kemudian menjalankannya sebagai:

dim file.txt

Ganti file.txtdengan nama file yang Anda inginkan.

Untuk menjalankannya dari sesi shell saat ini, sourceyang ~/.bashrcfile pertama:

. ~/.bashrc
heemayl
sumber
3
Apa yang ditandakan oleh "$ 1"? Saya seorang pemula dan mencoba untuk belajar daripada hanya menyalin dan menyebutnya sehari.
Jason Basanese
1
@JasonBasanese Saya menghargai keputusan Anda :) $1menunjukkan parameter posisi pertama atau argumen untuk fungsi..pikirkan itu sebagai cara untuk memberikan input ke fungsi atau skrip .. seperti semua bahasa pemrograman bashjuga menggunakan ini .... Anda akan temukan banyak sumber tentang ini di Google ..
heemayl
3

Bukan dengan alias, gunakan fungsi saja.

Dari halaman manual Bash :

ALIAS

[...] Tidak ada mekanisme untuk menggunakan argumen dalam teks pengganti. Jika diperlukan argumen, fungsi shell harus digunakan (lihat FUNGSI di bawah).

Jadi fungsi Anda bisa:

fungsi dim () {cd ~ jason / Documents; vim $ *; cd -;}

CijcoSistems
sumber
1
Bukankah ~ / Dokumen berfungsi dengan baik dalam hal ini? Juga apa arti simbol $ dan * dalam kasus ini? dan apakah - setelah cd dibutuhkan? Biasanya saya bisa mengetik cd dan naik direktori.
Jason Basanese
"Biasanya saya bisa mengetik cd dan naik direktori" - Saya hanya tahu dataran cduntuk membawa Anda ke direktori rumah Anda; cd ..naik satu tingkat ke atas. cd -membawa Anda ke direktori sebelumnya dari mana Anda cdmengedit.
Chriki
1
@JasonBasanese: Ya ~ / Dokumen akan berfungsi untuk semua orang (jika ini adalah fungsi untuk semua pengguna). $*seperti $1 $2 $3...hanya memberikan seluruh daftar ke vim, bukan argumen pertama yang Anda ketikkan. Dan seperti yang dikatakan Chriki, cd -akan kembali ke direktori sebelumnya (yang dulu ketika Anda memanggil fungsi).
CijcoSistems