Di Emacs saya bisa menjalankan shell menggunakan perintah berikut -
M-x term
M-x shell
M-x eshell
Apa perbedaan antara ketiganya?
Di Emacs saya bisa menjalankan shell menggunakan perintah berikut -
M-x term
M-x shell
M-x eshell
Apa perbedaan antara ketiganya?
Jawaban:
shell
adalah yang tertua dari 3 pilihan ini. Ini menggunakan Emacs comint-mode
untuk 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.
term
adalah 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 nano
atau less
di dalam Emacs).
eshell
adalah shell yang diimplementasikan secara langsung di Emacs Lisp. Anda tidak menjalankan bash
atau shell lain sebagai subproses. Akibatnya, sintaksisnya tidak sama dengan bash
atau sh
. Ini memungkinkan hal-hal seperti mengarahkan ulang output dari suatu proses secara langsung ke buffer Emacs (coba echo hello >#<buffer results>
).
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.)
eshell
adalah 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.
which grep
di 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.
eshell
akan memilikinya juga jika Anda memiliki program yang diinstal.