9 votes

Est-il possible d'avoir l'historique de bash en fonction du répertoire ?

Je ne suis pas le seul à utiliser certaines commandes dans certains répertoires, différentes dans d'autres répertoires. Lorsque j'entre dans un répertoire spécifique à partir duquel j'exécute un script avec plusieurs arguments, j'aimerais l'avoir dans l'historique facilement disponible. Au lieu de cela, l'historique est spammé par des centaines d'autres commandes provenant de différents onglets et Windows et il est difficile d'atteindre ce que j'étais exactement la chose que je voudrais réexécuter.

Imaginez que vous avez un serveur, que vous utilisez pour des script très spécifiques, que script est lancé avec des tonnes d'arguments. -x this -y that/thing/there.conf -d -g -t also -t more - chaque fois que vous vous connectez à ce serveur, pour utiliser le script, vous appuyez plusieurs fois sur le bouton et il est là.

Alors, y a-t-il un moyen de faire cela sur un seul système, sous un seul utilisateur ?

4voto

Mohsin Points 11

Tout d'abord, il pourrait être plus simple de simplement mettre en correspondance votre Up y Down pour history-search-backward y history-search-forward respectivement. De man bash :

   history-search-forward
          Search  forward through the history for the string of characters
          between the start of the current line and the point.  This is  a
          non-incremental search.
   history-search-backward
          Search backward through the history for the string of characters
          between the start of the current line and the point.  This is  a
          non-incremental search.

Avec ceci activé, si vous commencez à taper le nom de votre commande et ensuite appuyez sur Up seules les commandes de votre historique commençant par ce que vous avez tapé seront affichées. De cette façon, vous pouvez trouver très rapidement la commande qui vous intéresse et vous n'avez pas besoin de manipuler des fichiers d'historique spécifiques à un répertoire. Tapez simplement s entonces Up et seulement les commandes commençant par s sera trouvé. Utilisez fooba et seulement ceux qui commencent par fooba seront affichés.

Pour l'activer, ajoutez les lignes suivantes à votre fichier ~/.inputrc sur le serveur (en fonction de votre émulateur de terminal, vous pouvez avoir besoin d'un format légèrement différent. Jetez un coup d'oeil à ma réponse ici si celle-ci ne fonctionne pas) :

"\e[A": history-search-backward
"\e[B": history-search-forward

Cela dit, oui, il est possible de définir un fichier d'historique par répertoire. Ajoutez cette fonction à votre ~/.profile (pas à votre ~/.bashrc puisque ce fichier n'est pas lu par défaut lors de l'utilisation de l'application ssh pour se connecter à une machine distante) :

 setHistFile(){
    targetDirs=("/home/terdon/foo" "/home/terdon/bar")
    for dir in "${targetDirs[@]}"; do
        if [[ "$dir" = "$PWD" ]]; then
            ## Set the history file name
            export HISTFILE="./.bash_history"
            ## clear current history
            history -c
            ## read history from the $HISTFILE
            history -r
            ## Exit the function
            return
        fi
    done
    ## This will be run if the PWD is not in
    ## the targetDirs array
    export HISTFILE="$HOME/.bash_history"
    ## Read the history (in case we are leaving
    ## one of the targetDirs)
    history -r
}

Et puis mettez votre PROMPT_COMMAND (c'est une commande qui est exécutée chaque fois qu'une invite Shell est affichée) :

export PROMPT_COMMAND='setHistFile'

Changez le targetDirs à la liste des répertoires que vous voulez avoir leur propre fichier d'historique.

1voto

Charles Harley Points 2773

Il existe une extension Shell historique qui vous permet de faire des recherches dans l'historique et vous montre d'abord les résultats pertinents en fonction du répertoire actuel, du dépôt git, du statut de sortie et de l'hôte.

Vous pouvez installer le projet ici : https://github.com/curusarn/resh
Lancez-le en utilisant CTRL + R (remplace la recherche inverse).
Voici à quoi ressemble l'application de recherche :

screenshot of the search application

Clause de non-responsabilité : Je suis le créateur du projet et ceci est une auto-promotion éhontée.

0voto

.mycd - un script que j'ai écrit - pourrait être ce que vous recherchez. L'idée est de stocker un fichier d'historique bash par répertoire qui ne contient que les commandes exécutées dans ce répertoire. Une fois que les fichiers d'historique sont construits de cette manière, vous pouvez utiliser ctrl + r pour les fouiller.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X