Sebagai pengguna Linux, saya selalu menggunakan bash karena itu adalah default pada setiap distro yang saya gunakan. Orang yang menggunakan sistem Unix lain seperti BSD tampaknya lebih sering menggunakan shell lain. Untuk belajar lebih banyak, saya memutuskan untuk mencoba zsh.
Sebagai pengguna bash:
- Fitur apa yang akan saya lewatkan?
- Dan apa yang harus saya perhatikan?
Jawaban:
Sudah ada sedikit aktivitas pada topik di situs Stack Exchange lainnya. Pengalaman saya beralih dari bash ke zsh, sejauh yang dapat saya ingat (bertahun-tahun yang lalu²), adalah bahwa saya tidak melewatkan satu hal pun. Saya mendapatkan banyak; berikut adalah apa yang saya pikir adalah fitur khusus zsh sederhana yang paling saya gunakan:
Fitur zsh yang paling saya lewatkan ketika saya sesekali menggunakan bash adalah autocd: di zsh, menjalankan direktori berarti mengubahnya, asalkan Anda mengaktifkan opsi tersebut
autocd
.⁴Fitur lain yang sangat berguna adalah globbing mewah. The
hieroglifkarakter yang sedikit sulit untuk diingat tetapi sangat nyaman (seperti dalam, sering kali lebih cepat untuk mencari mereka daripada menulis setarafind
perintah). Beberapa contoh sederhana:foo*~*.bak
= semua kecocokan untukfoo*
kecuali yang cocok*.bak
foo*(.)
= hanya file biasa yang cocokfoo*
foo*(/)
= hanya direktori yang cocokfoo*
foo*(-@)
= hanya menjuntai tautan simbolik yang cocokfoo*
foo*(om[1,10])
= 10 file terbaru yang cocokfoo*
foo*(Lm+1)
= hanya file dengan ukuran> 1MB = dalam direktori dan semua nya subdirektori, secara rekursif⁴dir/**/foo*
foo*
dir
Untuk penggantian nama mewah,
zmv
builtin bisa berguna. Misalnya, untuk menyalin setiapfile
kefile.bak
:zmv -C '(*)(#q.)' '$1.bak'
Baik bash dan zsh memiliki sistem penyelesaian yang layak yang perlu dinyalakan secara eksplisit (
. /etc/bash_completion
atauautoload -U compinit; compinit
). Zsh jauh lebih dapat dikonfigurasi dan umumnya lebih bagus.Jika Anda menjalankan zsh tanpa a
.zshrc
, itu memulai menu interaktif yang memungkinkan Anda memilih opsi konfigurasi. (Beberapa distribusi dapat menonaktifkan ini; dalam hal ini, jalankanautoload zsh-newuser-install; zsh-newuser-install
.) Saya sarankan untuk mengaktifkan opsi histori yang direkomendasikan, menyalakan penyelesaian ("gaya baru"), dan menghidupkan "opsi shell umum" kecualibeep
. Kemudian, konfigurasikan lebih banyak opsi saat Anda menemukannya.² Pada saat penyelesaian yang dapat diprogram adalah fitur pembunuh zsh, tetapi bash segera mendapatkannya.
⁴ Fitur yang diperoleh bash hanya dalam versi 4 (jadi masih belum tersedia di banyak sistem) ada dalam tipe yang lebih kecil.
sumber
autocd
fitur yang Anda diskusikan di atas. Aktifkan fitur menggunakan perintahshopt -s autocd
. Kemudian fitur tersebut berfungsi seperti yang telah Anda jelaskan.where
perintah bawaan, jangan dikacaukan denganwhich
perintah.-exec
shell untuk hal-hal seperti seleksi dengane
dan pipa ke alat-alat sepertisort
dansed
untuk menulis ulang dengane
dan menyortir). Jauh lebih banyak, tentu saja.Juga penyelesaian tab default lebih baik daripada bash ... misalnya ...
~/.e.d
TAB akan berkembang menjadi~/.emacs.d/
zsh, bash hanya akan berbunyi bip.sumber
setopt
opsi non-default apa yang Anda gunakan untuk itu (jika ada)?_-.
menetapkan sebagai wildcard.zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*'
. Lihat stackoverflow.com/q/7906078/311660zsh
memungkinkan Anda mengedit perintah multi-line (lihat editor baris zsh ), bash tidak. Jika Anda mencoba trik yang sama (Ctrl-p
), bash mengambil perintah terakhir.sumber
Bash memiliki fitur untuk dapat membuka port menggunakan
atau
Namun, ini dinonaktifkan di Debian karena dianggap sebagai penghalang (jika path benar-benar ada) dan di luar ruang lingkup apa yang harus dilakukan shell. Informasi lebih lanjut [milis debian]
sumber
Yang - ditingkatkan di zsh
The
which
perintah di bash hanya mengungkapkan lokasi perintah.Dalam Zsh
which
akan mengungkapkan definisi darialias
, sumber untuk afunction
dan lokasi perintah.Katakanlah kita memiliki alias shell:
Di Bash jika kami bertanya:
which gg
hasilnya akan batalIn Zsh:
which gg
akan memberi kita ...Katakanlah kita memiliki fungsi shell:
Di Bash jika kami bertanya:
which hello
hasilnya akan batal.In Zsh:
which hello
akan memberi kita ...sumber
type
(builtin). Dan hanya untuk nitpick:which
adalah perintah eksternal, bukan bash builtin.zsh - shell lengkap
ada banyak, membaca
zshcontrib(1)
satu dapat mendeteksi dua versi gameautoload
-abletetris
(yang lain denganncurses
)zsh
dalam bersaing denganemacs
, untuk kelengkapan (seperti yang dijelaskan).=
Saya ingin menyebutkan
=
kata kunci, yang dapat menyebabkan iritasi dengancurl
(biasanya URL ada?var=val
di dalamnya; tetapi ituunsetopt
-able, saya pikir):q file =less
(gentoo
) memutuskan untukq file $(which less)
=
memperluas ke path lengkap dari perintah yang bersangkutan.barang lainnya
hal-hal lain, yang keluar dari pikiran, adalah prompt yang tepat
RPS1=%d
(untuk ditampilkan$PWD
dalam gaya), Alt + H(run-help
mis.man
), Alt + ? (which-command
)vared
, danzed
(autoload
fungsi), seperti minibuffer-like Emacs Alt + Xuntuk mengeksekusi widget tanpa mengikatnya, alias global dan suffix, durasi penyelesaian perintah pelacakan riwayat tambahan,-m
dan-regex
korek api, emulasi shell (mis.csh
,ksh
denganemulate
) danautoload
run-help
dengan cuplikan file untuk built-in.ratapan
Saya pikir sebagian besar, jika tidak semua, fitur diimplementasikan sejak lama, dan membaca changelogs, tidak ada perubahan besar dan penambahan fitur baru, yang sangat menyedihkan (tidak perlu dijelajahi dan ditemukan lagi).
bash
tampaknya lebih terdistribusi dalamreadline
(sebagai lawanzle
) dangnu history
dalam semangat linux; mis. fungsi readline dan keybindings dapat diterapkan secara global (seperti yang disimpan dalam~/.inputrc
dan/etc/inputrc
) jika tidak diganti oleh bash-specificbind
.kesimpulan
Saya pribadi berpikir
emacs
(terutama dari prospek (saat ini?)emacs-nox
Rasa) menjadi inspirasi untuk perangkat lunak yang luar biasa sepertizsh
dantmux
melakukan pekerjaan yang sangat baik dalam menjadi contoh dalam implementasi seperti itu; untuk orang-orang yang menghargai nilainya (ke tingkat yang tidak membutuhkan / tergantung padaX
server). Unix shell cukup kuat, dan kontinuitas dan konsistensinya cukup untuk alur kerja dan produktivitas yang tepat (dalam komputasi keseluruhan).sumber