Rolinh

Rolinh' release

Shells: Zsh vs Bash

Je passe ma vie dans mon shell. Ou presque… En tout cas, il fait clairement partie de mon quotidien et sur les conseils de mon ami kAworu (encore lui vous me direz mais il est un peu mon mentor ;) ) , voici à peu près un an, je suis passé de bash à zsh.

Et je ne regrette absolument pas ce choix! Comme shell pour tous les jours, zsh est un vrai plus. La chose la plus remarquable est le système d’auto- complétion.

Exemple avec mon gestionnaire de paquets, avec le [TAB] en zsh:

[robin@robin-d630 ~] % sudo pacman -S libc[TAB]
packages
libcaca            libcddb            libcompizconfig    libcuefile
libcanberra        libcdio            libconfig          libcups
libcanberra-pulse  libcgi             libcroco
libcap             libchamplain       libcss
libcdaudio         libchewing         libcue

et avec bash:

[robin@robin-d630 ~]$ sudo pacman -S libc[TAB][TAB]

Ben oui, il ne se passe absolument rien… Tandis qu’avec zsh je peux même naviguer avec les flèches directionnelles dans la liste des propositions.

Mais il y a encore plus fort. Si comme moi vous utilisez ssh pour vous connecter à vos serveurs (<3 ssh) et que vous vous authentifiez par système de clé publique/clé privée, là aussi la complétion marche:

[robin@robin-d630 ~] % scp -P 13337 foo robin@monserveur.com:public_html/[TAB]
remote file
conf/    images/  src/

C’est-y pas magggnifique?

Seulement voilà, il y a aussi des différences notables. Par exemple, l’autre jour j’ai voulu faire un scannage de machines hôtes d’un réseau à l’aide de nmap suite à une demande sur le forum d’Ubuntu-fr.

Et ben le résultat, le voilà:

[robin@thor ~] % nmap -sP 10.0.0.*
zsh: no matches found: 10.0.0.*
!1! [robin@thor ~] % nmap -sP 10.0.0.0/24
Starting Nmap 5.00 ( http://nmap.org ) at 2010-11-18 11:27 CET
Host 10.0.0.2 is up (0.0055s latency).
Host 10.0.0.100 is up (0.0092s latency).
Host 10.0.0.219 is up (0.0078s latency).
Host 10.0.0.226 is up (0.00061s latency).
Host 10.0.0.250 is up (0.00072s latency).
Host 10.0.0.251 is up (0.0028s latency).
Nmap done: 256 IP addresses (6 hosts up) scanned in 2.81 seconds

tandis qu’avec bash:

robin@thor:~$ nmap -sP 10.0.0.*
Starting Nmap 5.00 ( http://nmap.org ) at 2010-11-24 09:37 CET
Host 10.0.0.2 is up (0.0010s latency).
Host 10.0.0.219 is up (0.0064s latency).
Host 10.0.0.226 is up (0.00055s latency).
Host 10.0.0.250 is up (0.0030s latency).
Host 10.0.0.251 is up (0.0039s latency).
Nmap done: 256 IP addresses (5 hosts up) scanned in 3.13 seconds

Et oui, le joker * fonctionne dans ce cas. Il faudrait que j’investigue un peu plus pour en savoir la cause…

EDIT: merci à kAworu pour sa réponse détaillée ;)