Histoire de Bash avec horodatages

15

J'aimerais garder des horodatages sur les commandes enregistrées dans mon Bash $ HISTFILE, est-ce possible?

Je n'ai pas réussi à le configurer en utilisant man bashcomme source d'information.

Mes autres options sont les suivantes:

function thebanana() {
  local -r -a bash_commands=(
    "ls"
    # ... more coconut commands
  )
  for bash_command in "${bash_commands[@]}"; do
    printf "${bash_command}"
    printf ":"
  done
}
export HISTFILE=banana
export HISTIGNORE="$(thebanana)"
export HISTSIZE=999999
export HISTFILESIZE=999999999
export HISTCONTROL=ignoredups:erasedups

J'aurais dû mentionner que je suis sur OS X Mountain Lion (soupir). uname -aDonne moi:

Darwin CoconutMac.local 12.2.0 Darwin Kernel Version 12.2.0: Sat Aug 25 00:48:52 PDT 2012; root:xnu-2050.18.24~1/RELEASE_X86_64 x86_64

et echo $BASH_VERSIONme donne:

3.2.48(1)-release

J'ai essayé d'ajouter ceci:

export HISTTIMEFORMAT='%b %d %I:%M:%S %p '

et il préfixe uniquement ce type d'horodatage aux commandes:

#1349057791

J'essaie de renvoyer la variable ( echo $HISTTIMEFORMAT), elle a la bonne valeur.

Intéressant!

J'ai même supprimé complètement .profile pour déboguer cela. Toujours des horodatages amusants:

#1349058320

Je ne sais pas comment résoudre davantage ce problème ... :(

Solution : j'utilisais un script qui lit directement $ HISTFILE, pas l'historique intégré, donc l'horodatage basé sur l'époque (en secondes depuis le temps universel coordonné (UTC) du 1er janvier 1970) n'était pas traduit à l'aide de la chaîne de formatage de la date . Plain-old historyfonctionne très bien, je vais l'utiliser à la place.

Robottinosino
la source
2
Avez-vous essayé de régler HISTTIMEFORMAT?
jw013
Je me trompe probablement le format strftime. Il serait utile que la page de manuel comprenne au moins quelques exemples. +% Y-% m-% d% H-% M-% S?
Robottinosino

Réponses:

15

Oui, mettez ceci dans ~/.bashrc:

export HISTTIMEFORMAT='%F %T '

Ensuite, exécutez les commandes suivantes:

. ~/.bashrc
history

Il ressemblera à ceci :

 (...)
 5200  2012-09-30 23:55:37 find -printf '%Ts %f\n'
 5201  2012-10-01 00:00:58 ls
 5202  2012-10-01 00:03:45 cd
 (...)

Explications de la sortie:

  • le premier col est unique id
  • la seconde est la date, la troisième est l'heure
  • la dernière est votre ligne de commande
Gilles Quenot
la source
3
Non, ne fonctionne pas sur OSX .. :( Probablement que c'est le problème. Un étrange OS.
Robottinosino
Et vous source ~/.bashrc?
Gilles Quenot
Je l'ai définitivement fait. Il fait "quelque chose": ajouter une ligne commentée avant la commande avec un horodatage numérique: # 1349057149
Robottinosino
1
@Robottinosino Oui, la ligne commentée est le format attendu. Pour afficher les commandes avec une heure formatée, utilisez la historycommande intégrée, ne regardez pas directement le fichier historique.
jw013
1
Est-il possible d'enregistrer l'horodatage dans le fichier historique à l'aide de HISTTIMEFORMAT? Je n'utilise jamais la historycommande, à la place j'utilise un éditeur de texte pour trouver les commandes que je recherche, et ce serait bien d'avoir une référence de date lisible par l'homme.
disparu le