IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

bash_history avec informations temporelles


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    amateur
    Inscrit en
    Avril 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Avril 2013
    Messages : 1
    Par défaut bash_history avec informations temporelles
    Bonjour,

    Sous Bash, je souhaiterais créer un autre fichier que le ~/.bash_history (disons ~/.bash_history_timed)
    qui soit identique au ~/.bash_history d'origine, mais avec en plus la date et l'heure où chaque commande a été tapée.

    Et si je pouvais aussi avoir le répertoire courant ce serait l'idéal, comme avec
    echo $PWD $(date +"%Y-%j-%H-%M-%S")

    Si vous savez comment le faire facilement, merci d'avance pour vos pistes et/ou solutions !

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    je ne pense pas que le bash_history soit alimenté par une autre méthode que le bash lui même donc dans son binaire, et qu'il te faille du coup écrire ton propre shell.

    par contre sur la commande history oui là tu peux en changeant une variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "export HISTTIMEFORMAT=\"%c \"\$(pwd) " > /etc/profile.d/history.sh
    si ma memoire est bonne ; selon les distributions c'est peut être ailleurs.

    mais ça n’influera pas sur le ~/.bash_history

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Voici une piste (sans écrire son propre shell!)...

    Tu peux utiliser les possibilités d'interprétation du prompt.

    Tu as besoin
    • d'informations avant l'exécution de chaque commande (comme le répertoire courant (car celui-ci peut être changé par la commande elle-même (genre cd pushd popd))), donc stockées lors de l'exécution de la commande précédente
    • et d'informations après l'exécution de la commande courante (comme l'heure où le return a été tapé).


    Voici une ébauche à peaufiner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function my_history {
        echo "${MY_PWD} $(date +"%Y-%j-%H-%M-%S") $(tail -1 ~/.bash_history)" >> ~/.bash_history_timed
        MY_PWD=$PWD
    }
     
    if [ -z "${MY_PS1-}" ] ; then MY_PS1=$PS1 ; fi
    PS1='$(my_history)'"${MY_PS1}"

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 339
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 339
    Par défaut
    Bonjour,

    En bash, vaut mieux je pense utiliser la variable "PROMPT_COMMAND" qui est là pour executer une commande avant l'affichage du prompt.

    Un autre point, il vaut mieux faire un 'history | tail -1" que de passer par le fichier .bash_history qui lui n'est pas remis à jour en permanence (et dont on pourrait d'ailleurs récupérer la dernière commande d'une autre session bash du même utilisateur).

  5. #5
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Voici une piste (sans écrire son propre shell!)...

    Tu peux utiliser les possibilités d'interprétation du prompt.

    Tu as besoin
    • d'informations avant l'exécution de chaque commande (comme le répertoire courant (car celui-ci peut être changé par la commande elle-même (genre cd pushd popd))), donc stockées lors de l'exécution de la commande précédente
    • et d'informations après l'exécution de la commande courante (comme l'heure où le return a été tapé).


    Voici une ébauche à peaufiner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function my_history {
        echo "${MY_PWD} $(date +"%Y-%j-%H-%M-%S") $(tail -1 ~/.bash_history)" >> ~/.bash_history_timed
        MY_PWD=$PWD
    }
     
    if [ -z "${MY_PS1-}" ] ; then MY_PS1=$PS1 ; fi
    PS1='$(my_history)'"${MY_PS1}"
    bonne idée... 'lourd' ... mais pas con..

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    Bonjour,

    En bash, vaut mieux je pense utiliser la variable "PROMPT_COMMAND" qui est là pour executer une commande avant l'affichage du prompt.
    Exact! (si on utilise un autre shell que bash, on pourra se "rabattre" sur ma proposition)

    Un autre point, il vaut mieux faire un 'history | tail -1" que de passer par le fichier .bash_history qui lui n'est pas remis à jour en permanence (et dont on pourrait d'ailleurs récupérer la dernière commande d'une autre session bash du même utilisateur).
    C'est bien ce que je pensais! Et je plussoie!
    Je voulais répondre rapidement (avant d'aller déjeuner) et, comme je pensais que la commande 'history' était aliasée vers la commande 'fc' (que je n'ai jamais réussi à faire marcher comme je voulais), j'ai malencontreusement choisi la mauvaise voie...

    La version améliorée par disedorgue devient donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function my_history {
        # Gestion de la toute première commande 
        [ -n "${MY_PWD-}" ] && echo "${MY_PWD-} $(date +'%Y-%j-%H-%M-%S') $(history | tail -1)" >> ~/.bash_history_timed
        MY_PWD=$PWD
    }
     
    PROMPT_COMMAND=my_history

Discussions similaires

  1. prediction avec serie temporelle
    Par hyacinthus dans le forum MATLAB
    Réponses: 0
    Dernier message: 23/10/2008, 11h16
  2. Concaténation textkey avec information Dataset
    Par jules_11 dans le forum BIRT
    Réponses: 13
    Dernier message: 20/04/2007, 19h35
  3. Réponses: 3
    Dernier message: 22/06/2006, 17h39
  4. Tables avec données temporelles
    Par blins dans le forum Oracle
    Réponses: 12
    Dernier message: 12/12/2005, 09h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo