Hangi özellikleri zsh ve bash eksik veya tam tersi?


62

Bir Linux kullanıcısı olarak, her zaman sadece bash kullandım, çünkü kullandığım her dağıtımda varsayılandı. BSD gibi diğer Unix sistemlerini kullanan kişiler, diğer mermileri çok daha sık kullanmaktadır. Biraz daha fazla şey öğrenmek adına, zsh'ı denemeye karar verdim.

Bir bash kullanıcısı olarak:

  • Hangi özellikleri özleyeceğim?
  • Ve neye dikkat etmeliyim?


5
@Gilles bir gün bütün bu kişilerin buraya taşınması ve bir araya gelmesi güzel olabilir ...
xenoterracide 22:10

Yanıtlar:


45

Diğer Stack Exchange sitelerinde konuyla ilgili oldukça fazla aktivite oldu. Bash'dan zsh'a geçiş tecrübem, hatırlayabildiğim kadarıyla (yıllar önce2 idi), tek bir şeyi kaçırmamamı sağladı. Çok şey kazandım; İşte en çok kullandığım zsh-özgü özellikler olduğunu düşünüyorum:

  • Zaman zaman bash kullandığımda en çok özlediğim zsh özelliği autocd'dir: zsh'de, bir dizini çalıştırmak, seçeneği autocdaçmanız şartıyla, onu değiştirmek anlamına gelir.

  • Bir diğer çok kullanışlı özellik de süslü küreciliktir. Hiyeroglifler karakterleri (olduğu gibi, bu eşdeğer yazmak için daha onları aramak için sık sık hızlıdır hatırlamak zor ama son derece elverişli biraz vardır findkomutu). Daha basit örneklerden birkaçı:
        foo*~*.bak= eşleşenler foo*dışındakiler için eşleşmeler *.bak
        foo*(.)= sadece normal dosyalar eşleşir foo*
        foo*(/)= sadece dizinler eşleşir foo*
        foo*(-@)= sadece sembolik bağlantılar eşleşir foo*
        foo*(om[1,10])= en son 10 eşleşir eşlemeler foo*
        foo*(Lm+1)= sadece dosya boyutu> 1MB = dizinde ve bunların tümü alt dizinler, özyinelemeli⁴
        dir/**/foo*foo*dir

  • Süslü isimler için, zmvyerleşik kullanışlı olabilir. Örneğin, her filebirini kopyalamak için file.bak:zmv -C '(*)(#q.)' '$1.bak'

  • Hem bash hem de zsh açıkça ( . /etc/bash_completionveya autoload -U compinit; compinit) açılması gereken iyi bir tamamlama sistemine sahiptir . Zsh'ler çok daha yapılandırılabilir ve genellikle meraklı.

Zsh'yi a olmadan çalıştırırsanız .zshrc, yapılandırma seçeneklerini seçmenizi sağlayan etkileşimli bir menü başlatır. (Bazı dağıtımlar bunu devre dışı bırakabilir; bu durumda, çalıştırın autoload zsh-newuser-install; zsh-newuser-install.) Önerilen tarih seçeneklerinin etkinleştirilmesini, ("yeni stil") tamamlanmasını ve "genel kabuk seçeneklerini" açmanızı öneririm beep. Daha sonra, onları keşfederken daha fazla seçenek yapılandırın.

² Programlanabilir tamamlanma anında zsh'nin katil özelliğini oluşturuyordu, ancak çok geçmeden bash bunu satın aldı.
H Yalnızca 4. sürümde elde edilen bash (bu nedenle hala birçok sistemde mevcut değildir) özellikleri daha küçük tiptedir.


5
Bash 4.0 şimdi autocdyukarıda tartıştığınız özelliği destekliyor . Komutu kullanarak özelliği etkinleştirin shopt -s autocd. Ardından özellik açıkladığınız gibi çalışır.
Philluminati

zsh ayrıca, wherekomutla karıştırılmaması için yerleşik bir whichkomuta sahiptir.
Sildoreth

@EdGrimm Ben GNU ve FreeBSD yapabilirsiniz bulmak düşünüyorum Zsh glob eleme (ile yapabileceğiniz her şeyi -execile seçim gibi şeyler için bir kabuk eve benzeri araçlar içine boru hattı sortve sedtekrar yazma için eve sıralama). Tabii ki çok daha ayrıntılı.
Gilles

On yıldan fazla bir süredir bulma man sayfasını kontrol ettikten ve tekrar kontrol ettikten sonra sanırım gerçekten aramayı bıraktım. Ancak, yorum yapmadan önce son bir kez kontrol etmiş olsaydım, en azından -size seçeneğinin şimdi birimleri baytlara indirdiğini görmüştüm.
Ed Grimm

11

Ayrıca varsayılan sekme tamamlama işlemi bash'den daha iyidir ... örneğin ...

~/.e.dSEKME ~/.emacs.d/zsh olarak genişleyecektir , bash sadece bip sesi çıkaracaktır.


yapmadı. setopt(eğer varsa) bunun için hangi varsayılan olmayan seçeneği kullanıyorsunuz?

_-.Joker olarak ayarladığımı fark ettim . zstyle ':completion:*' matcher-list 'm:{a-zA-Z}={A-Za-z}' 'r:|[._-]=* r:|=*' 'l:|=* r:|=*' . Bkz. Stackoverflow.com/q/7906078/311660
ocodo

10

zshbir çok satırlı komutu düzenlemenizi sağlar (bkz zsh line editor ), bash yapmaz. Aynı hile ( Ctrl-p) denerseniz , bash son komutu alır.


2
Bash bunu yapar, en azından 4.2.37 sürümünden itibaren; yeni satırları noktalı virgüllerle değiştirir ve düzenlemek için tek bir satır verir.
Keith Thompson,

1
Hala o kadar iyi değil. (:
SilverWolf

8

Bash kullanarak bağlantı noktalarını açabilme özelliğine sahiptir.

/dev/tcp/host/port

veya

/dev/udp/host/port

Bununla birlikte, Debian'da bir engel olarak (yolun gerçekten mevcut olması halinde) ve bir kabuğun yapması gereken kapsamın dışında görüldüğü için devre dışı bırakılmıştır. Daha fazla bilgi [debian mail listesi]


5
zsh, bash / dev / tcp işlevinden daha fazla yetenekleri olmasına rağmen / dev / udp işlevine sahip olmayan ztcp yerleşkesine sahiptir. Yine de socat kullanmayı tercih ederim.
Stéphane Chazelas 10:12

2

Hangisi - zsh ile geliştirilmiştir

whichBash komut sadece komuta yerini ortaya koymaktadır.

Zsh'de a'nın whichtanımı, a'nın aliaskaynağı functionve bir komutun yeri açıklanacaktır.

Diyelim ki bir kabuk takma adımız var:

alias gg='git log'

Eğer biz istersek Bash'de: which ggsonuç geçersiz olur

Zsh'de: which ggbize verecek ...

gg: aliased to git log

Diyelim ki bir kabuk fonksiyonumuz vardı:

hello() {
    echo "Hello World"
}

Bash 'de sorsak: which hellosonuç geçersiz olur.

Zsh'de: which hellobize verecek ...

hello() {
    echo "Hello World"
}

Bash, aynı işlevi type(builtin) komutu ile sağlar. Ve sadece nitpick için: whichharici bir komuttur, bir bash yerleşimi değildir.
Torkel Bjørnson-Langen


0

zsh - tam bir kabuk

aracılığıyla okuma, çok var zshcontrib(1)iki sürümü algılayabilir biri autoloadsıfat daha tetrisoyunların (diğer ncursescinsinden) zshile rekabet içinde emacs(açıklandığı gibi) tamlığı için.

=

Şununla =tahrişe neden olabilecek anahtar kelimeden bahsetmek isterim curl(URL’ler genellikle içindedir ?var=val; ancak unsetopt-able, sanırım):

  • q file =less( gentoo) çözüldüq file $(which less)

= Söz konusu komutun tam yoluna genişler.

diğer güzellikler

akıldan çıkarmayan diğer şeyler, Emacs'ın widget'ları bağlamadan, genel ve son takma takma adları kullanmadan çalıştırma gibi doğru istemi RPS1=%d( $PWDstilde görüntülemek için), Alt + H( run-helpyani. man), Alt + ? ( which-command) varedve zed( autoloadişlevi). Alt + Xgenişletilmiş geçmiş izleme komut tamamlama süresi -mve -regexeşleştiriciler, kabuk öykünmesi (örneğin csh, kshile emulate) ve autoload run-helpyerleşikler için dosya parçacıkları.

Yeremya peygamberin mersiyeler kitabı

Özelliklerin hepsinin uzun bir zaman önce uygulanmadığı ve değişikliklerin yapıldığı okumaların çoğunun, çok üzücü (keşfedilecek ve keşfedilecek hiçbir şey) önemli bir değişiklik ve yeni özellik ilavesi olmadığını düşünüyorum.

bashgibi daha üzere dağıtılmış olarak readline(karşı zle) ve gnu historyLinux ruhu içinde; (muhafaza örn taleb fonksiyonları ve keybinding küresel uygulanabilir ~/.inputrcve /etc/inputrcBash özgü tarafından geçersiz ise) bind.

Sonuç

Ben şahsen düşünüyorum emacs(?). (Akımın umudu esp emacs-noxgibi olağanüstü yazılım için ilham kaynağı olmak lezzet) zshve tmuxböyle bir uygulamada da örnek olmak çok iyi bir iş yaptı; Değerini takdir eden insanlar için (ihtiyaç duymayan / Xsunucuya bağlı olarak ). Unix kabuğu yeterince güçlüdür ve sürekliliği ve tutarlılığı uygun bir iş akışı ve verimlilik için yeterlidir (genel hesaplamada).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.