Rendez-vous sur Arrakis

C'est lorsque nous croyons savoir quelque chose qu'il faut justement réfléchir un peu plus profondément. F. Herbert

mksh : plus rapide que bash et zsh

Suite à une discussion lue sur la liste de diffusion de suckless.org, j'ai été tenté de tester le shell mksh. Bien m'en a pris, il est étonnant de rapidité!

Ne vous attendez pas non plus à une révolution, un shell reste un shell ☺.
Cela dit, je le trouve nettement plus rapide. Plus rapide que bash, bien évidemment tellement ce dernier est plein, mais aussi plus rapide que zsh. Si comme moi vous n'utilisez pas le quart des possibilités de ce dernier shell, vous devriez tenter mksh.

Petite comparaison de la taille des binaires :

 -rwxr-xr-x 1 root root 264904 mars  15  2015 /bin/mksh
 -rwxr-xr-x 1 root root 722464 nov.  25  2014 /bin/zsh5
 -rwxr-xr-x 1 root root 1029624 nov.  13  2014 /bin/bash
 

mksh est donc 74% plus petit que bash et 63% plus petit que zsh (oui, j'me la pète, je fais des maths ^^)

Pour changer de shell, tapez :

chsh

Puis entrez le bon chemin vers mksh, soit "/bin/mksh".

Je vous invite à légèrement configurer mksh en mettant dans le fichier ~/.mkshrc

 # les alias et les fonctions fonctionnent comme avec les autres shell
 alias ll='ls -l'
 mkcd() { mkdir "$1" && cd "$1" }
 
 HISTFILE=~/.mksh_hist
 HISTSIZE=3000
 
 PS1='$PWD # '; (( USER_ID )) && PS1=$(echo "\e[0;32m\$PWD\e[0;36m::\e[0;37m$ " ); 
 

Amusez-vous bien ;)

le 27/04/2016 à 11:00:14, sogal a dit :

Salut,
Et comparativement au ksh (pdksh) d'origine dans OpenBSD, ça donne quoi ? Plus rapide ? Plus de fonctionnalités ? Ou il est au contraire encore plus minimaliste ? :)

le 27/04/2016 à 11:48:38, Thuban a dit :

@sogal : Je dirais équivalent. mksh est le portage de ksh pour linux :)

le 27/04/2016 à 11:52:58, Angristan a dit :

Que veux-tu dire par "plus rapide" ? J'ai du mal à saisir la notion de rapidité pour un shell ^^

le 27/04/2016 à 12:11:36, Thuban a dit :

@Angristan : oui, forcément, le titre n'est pas clair.
Plus rapide à se lancer déjà! Quand t'ouvre un terminal et qu'il faut attendre plus d'1 seconde avant de pouvoir taper, c'est insupportable.
Mais ça se répercute sur tous les scripts ce temps de chargement plus vite du coup :)

le 27/04/2016 à 12:30:02, Spartiate a dit :

Peux-tu mettre le lien de la discussion sur la liste de diffusion de suckless plutôt que l'url de suckless stp??

le 27/04/2016 à 13:22:02, Creak a dit :

Je suis pas sûr que le gain de rapidité au démarrage soit vraiment la chose la plus productive du monde. J'ai une moyenne de 3.5 ms environ pour lancer `bash`, lancer la commande `exit` et quitter, avec cette commande:

$ time bash -c exit
bash -c exit 0,00s user 0,00s system 85% cpu 0,003 total

J'ai fait la même chose avec `zsh` et j'ai une moyenne, un peu moins bonne, de 5 ms. Et avec `mksh` j'ai une moyenne, effectivement meilleure, de 3 ms.

Bref à ce niveau là, je choisirais mon shell plutôt sur un critère de qualité que de rapidité (perso, Zsh + Oh-My-Zsh est de loin le combo gagnant pour ma productivité).

le 27/04/2016 à 15:49:22, Mathias a dit :

Hello,

Petit coquille ici : "les alias et les fonctions fonctionnent comment avec les autres shell"
--> s/comment/comme

Bye !

le 27/04/2016 à 16:00:54, Thuban a dit :

@Mathias : Corrigé, merci!

le 27/04/2016 à 16:01:54, Thuban a dit :

@Creak : Les goûts et les couleurs, hein :)
Comme je disais, si on a absolument besoin d'une fonction génial d'un autre shell, alors ça ne sert à rien de changer.

le 27/04/2016 à 16:03:39, Thuban a dit :

@Spartiate : 'Faut que je la retrouve...
C'est fait :)

le 27/04/2016 à 21:17:01, mirabilos a dit :

(Pardon pour le anglais, mais je ne parlez-pas français)

I’m happy you found mksh! I’m its developer.

Your PS1 with colours is not quite right. It should be something like this:

PS1='$PWD # '; (( USER_ID )) && PS1=$'\a\r\a\e[0;32m\a$PWD\a\e[36m\a::\a\e[37m\a$ '

With the addition of \a\r at the begin, \a acts like \[ and \] in GNU bash.

Note that mksh comes with an example “dot.mkshrc” which has more aliases, a more refined PS1, and which you can use as basis for your work / configuration, too. We are also on IRC (irc.freenode.net) in channel #!/bin/mksh (yes, it’s really the name), and I am willing to customise PS1 for anyone who asks, or convert PS1 from GNU bash syntax to mksh syntax.

le 28/04/2016 à 08:08:48, Thuban a dit :

@mirabilos : Hi!
Thank you for your kind answer. I'll fix my PS1.

And you're right, an example is avaialbe in /usr/share/doc/mksh/examples (at least on debian).