Relancer une précédente commande en ksh

Pour le boulot, on fait parfois des sudo su - someUser avec someUser qui est en ksh et qui en plus est en mode vi (Adieu C-r, C-p, C-k, C-e. Bonjour /, Esc-k, dd, A). Du coup, comme il est « partagé », je ne mets pas de bash par défaut ni de set -o emacs (sympa hein ‽). Et au final, je m’y retrouve plutôt bien. Il n’y a pas tellement de différences entre ksh et bash.

Sauf une chose dont je me sers au final assez souvent, l’history expansion (avec le fameux sudo !! par exemple, mais aussi !!:gs:/foo/bar/). Mais en cherchant un peu, il y a quelque chose qui y ressemble vaguement : la commande r. Ça n’est pas la panacée, mais c’est un début : ça permet de relancer la dernière commande qui commence par l’argument de r.

$> echo "toto"
$> touch toto
$> r e
#lance echo "toto"
$> r t
#lance touch toto

Avec un argument entier, cela fait la même chose que ! en bash : un positif = la nième commande, un négatif = la nième commande avant celle-ci.

$> echo "toto"
$> touch toto
$> r -2
#lance echo "toto"

Et enfin, avec r avant=apres, on relance la dernière commande en changeant le premier avant par après.

$> cp fic1 /tmp/fic1
$> r 1=2
#lance cp fic2 /tmp/fic1
Autres billets

Date: <2014-03-22>

Generated by Emacs 24.3.1 (Org mode 8.2.4) - Show Org source (htmlized)

CSS inspired by Tontof, colors by Chaotic Soul

Validate