One-liner version
Voici un one-liner version. C'est l'original. J'ai aussi posté une fonction courte et une version longue de la fonction de la version avec plusieurs fonctionnalités ajoutées. J'aime la fonction des versions, parce qu'ils ne sont pas les fringues d'autres variables dans votre environnement et qu'elles sont beaucoup plus lisible que le one-liner. Ce post contient des informations sur la façon dont ils fonctionnent tous, qui ne peut pas être dupliqué dans les autres.
Ajoutez les lignes suivantes à votre ~/.bashrc
le fichier:
export PROMPT_COMMAND='hpwd=$(history 1); hpwd="${hpwd# *[0-9]* }"; if [[ ${hpwd%% *} == "cd" ]]; then cwd=$OLDPWD; else cwd=$PWD; fi; hpwd="${hpwd% ### *} ### $cwd"; history -s "$hpwd"'
Ce qui fait une entrée de l'historique qui ressemble à ceci:
rm subdir/file ### /some/dir
J'utilise ###
comme un délimiteur de commentaire de chacun de commentaires que l'utilisateur peut entrer et de réduire le risque de collisions pour décaper la vieille chemin des commentaires qui seraient autrement s'accumuler si vous appuyez sur entrée sur une ligne de commande vide. Malheureusement, l'effet secondaire est que la commande echo " ### "
obtient mutilé, bien que cela doit être assez rare.
Certaines personnes vont trouver le fait que je réutiliser le même nom de variable pour être désagréable. Normalement, je ne voudrais pas, mais ici, je suis en train d'essayer de minimiser l'empreinte. Il est facilement changé en tout cas.
Aveuglément suppose que vous ne l'utilisez pas HISTTIMEFORMAT
ou de la modification de l'histoire d'une autre façon. Il serait facile d'ajouter un date
commande pour le commentaire en lieu et place de l' HISTTIMEFORMAT
fonctionnalité. Toutefois, si vous avez besoin de l'utiliser pour une raison quelconque, il travaille toujours dans un shell interne est exécuté car il peut annuler automatiquement:
$ htf="%Y-%m-%d %R " # save it for re-use
$ (HISTTIMEFORMAT=$htf; history 20)|grep 11:25
Il ya un couple de très petits problèmes avec elle. L'une est que si vous utilisez l' history
commande comme ceci, par exemple:
$ history 3
echo "hello world" ### /home/dennis
ls -l /tmp/file ### /home/dennis
history 3
Le résultat ne sera pas le commentaire sur l' history
commande en elle-même, même si vous le verrez si vous appuyez sur flèche haut ou la question d'un autre history
commande.
L'autre est que les commandes incorporées des retours à la ligne laisser une décommenté la copie dans l'histoire, en plus le commentaire de copie.
Il y a peut être d'autres problèmes qui se présentent. Laissez-moi savoir si vous en trouvez.
Comment ça marche
Bash exécute une commande contenue dans l' PROMPT_COMMAND
variable à chaque fois que l' PS1
principal message est émis. Ce petit script prend avantage de cette pour attraper la dernière commande dans l'histoire, ajoutez un commentaire à lui et l'enregistrer en arrière.
Ici, il est divisé à part avec les commentaires:
hpwd=$(history 1) # grab the most recent command
hpwd="${hpwd# *[0-9]* }" # strip off the history line number
if [[ ${hpwd%% *} == "cd" ]] # if it's a cd command, we want the old directory
then # so the comment matches other commands "where *were* you when this was done?"
cwd=$OLDPWD
else
cwd=$PWD
fi
hpwd="${hpwd% ### *} ### $cwd" # strip off the old ### comment if there was one so they
# don't accumulate, then build the comment
history -s "$hpwd" # replace the most recent command with itself plus the comment