GNU/Linux >> Tutoriels Linux >  >> Linux

Est-il possible d'avoir un historique bash sensible au répertoire

Tout d'abord, il pourrait être plus simple de simplement mapper votre Up et Bas boutons à history-search-backward et history-search-forward respectivement. À partir 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 cette option activée, si vous commencez à taper le nom de votre commande, puis appuyez sur Haut , 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 , puis Haut et uniquement les commandes commençant par s sera trouvé. Utilisez fooba et uniquement ceux commençant par fooba sera affiché.

Pour activer cela, ajoutez les lignes suivantes à votre ~/.inputrc fichier sur le serveur (selon votre émulateur de terminal, vous pourriez avoir besoin d'un format légèrement différent. Jetez un œil à 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 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 définissez votre PROMPT_COMMAND variable (il s'agit d'une commande exécutée à chaque fois qu'une invite du shell s'affiche) :

export PROMPT_COMMAND='setHistFile'

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


Linux
  1. Comment utiliser les commandes d'historique de Bash

  2. Comment effacer l'historique de Bash sous Linux

  3. Exécuter les scripts Bash en entrant dans un répertoire ?

  4. Est-il possible d'émuler des versions plus anciennes de Bash ?

  5. Nettoyage automatique de l'historique de Bash ?

Commande d'historique sous Linux (historique de bash)

Comment faire en sorte que la saisie anticipée s'applique à la recherche dans l'historique de Bash (ctrl-r) ?

Comment Ssh dans un répertoire spécifique ?

Ajouter un script bash au chemin

Bash :Aucun fichier ou répertoire de ce type ?

Comment exécuter un script bash ?