Apa perbedaan antara shell, eshell, dan istilah dalam Emacs?

60

Di Emacs saya bisa menjalankan shell menggunakan perintah berikut -

M-x term

M-x shell

M-x eshell

Apa perbedaan antara ketiganya?

Kshitiz Sharma
sumber

Jawaban:

61

shelladalah yang tertua dari 3 pilihan ini. Ini menggunakan Emacs comint-modeuntuk menjalankan subkulit (misalnya bash). Dalam mode ini, Anda menggunakan Emacs untuk mengedit baris perintah. Subproses tidak melihat input apa pun sampai Anda menekan Enter. Emacs bertindak seperti terminal bodoh. Itu mendukung kode warna, tetapi bukan hal-hal seperti memindahkan kursor, sehingga Anda tidak dapat menjalankan aplikasi berbasis kutukan.

termadalah emulator terminal yang ditulis dalam Emacs Lisp. Dalam mode ini, tombol yang Anda tekan dikirim langsung ke subproses; Anda menggunakan kapabilitas pengeditan baris apa pun yang disajikan shell, bukan milik Emacs. Ini juga memungkinkan Anda untuk menjalankan program yang menggunakan kapabilitas terminal lanjutan seperti pergerakan kursor (mis. Anda dapat menjalankan nanoatau lessdi dalam Emacs).

eshelladalah shell yang diimplementasikan secara langsung di Emacs Lisp. Anda tidak menjalankan bashatau shell lain sebagai subproses. Akibatnya, sintaksisnya tidak sama dengan bashatau sh. Ini memungkinkan hal-hal seperti mengarahkan ulang output dari suatu proses secara langsung ke buffer Emacs (coba echo hello >#<buffer results>).

cjm
sumber
19

Menurut halaman Xahlee :

shell adalah antarmuka standar emacs untuk antarmuka baris perintah Sistem Operasi.

term(istilah-ansi hampir sama dengan istilah hari ini. Mereka adalah paket yang berbeda, tetapi sekarang keduanya didefinisikan dalam term.el) adalah emulator terminal. Berperilaku seperti aplikasi terminal khusus, seperti {xterm, gnome-terminal, puTTY}. Ini kompatibel untuk lebih banyak aplikasi shell daripada antarmuka shell emacs, tetapi kunci emacs standar seperti kursor bergerak tidak berfungsi di sini (karena emulasi terminal.)

eshelladalah shell yang ditulis seluruhnya dalam emacs lisp. Catatan: ini bukan emulator bash. Eshell adalah shell dengan sendirinya, tetapi mirip dengan bash atau shell lainnya.

Yang mana yang harus Anda gunakan?

Itu tergantung pada preferensi Anda.

shell bagus untuk penggunaan umum perintah shell unix klasik / standar, seperti {grep, du, ls, sort, cat, head, tail, uname, ...}.

term & ansi-term bagus jika Anda ingin menjalankan hal-hal seperti ssh, atau antarmuka interaktif baris perintah lainnya (seperti {python, ruby, lisp} shell), atau aplikasi GUI berbasis teks seperti {vim, synaptic, ...}.

eshell bagus terutama pada Microsoft Windows di mana bash tidak diinstal, atau, jika Anda adalah programer emacs lisp, karena eshell memiliki akses langsung ke emacs lisp.

CodyChan
sumber
Semua perintah yang Anda sebutkan (grep, du, ls, dll.) Adalah program dan perintah yang dibuat di dalam shell. eshellakan memilikinya juga jika Anda memiliki program yang diinstal.
Bart Louwers
1
@ Bart mencoba untuk menghapus grep Anda di sistem Anda dan melakukan aksi grep di eshell, Anda akan menemukan bahwa grep di eshell tidak grep di sistem Anda, which grepdi eshll mengatakan "eshell / grep adalah" fungsi Lisp yang dikompilasi dalam `em- unix.el ', karena grep di sistem Anda dapat dieksekusi di eshell, seperti yang saya katakan eshell sangat berguna dalam MS yang banyak alat kecil seperti grep tidak diinstal.
CodyChan