Question Recherche de l'historique des commandes, partielle + flèche vers le haut


J'ai cherché, mais je n'ai rien trouvé à ce sujet. Je recherche une fonctionnalité en bash, en utilisant un terminal.

Il y a bien longtemps, j'avais un utilisateur sur un système Debian, et un ami m'a configuré avec une fonction de recherche d'historique (je crois avoir utilisé tcsh alors), où je tapais le début d'une commande précédente, et il ferait une recherche, basée sur la chaîne partielle.

Par exemple. si mon histoire est:

./script.pl
./script.pl arg1
cat output
cat output | grep yada

Et je tape ., et appuyez sur la flèche vers le haut, cela me montrerait: ./script.pl arg1. Appuyez à nouveau et cela montrerait ./script.pl, etc.

Tout comme il ferait un grep sur .bash_history. Y a-t-il un moyen d'obtenir cette fonctionnalité?


121
2017-09-03 12:11


origine


duplicata possible de Historique des commandes iPython Like Shell - Marcel Stimberg
@Marcel On dirait que cela pourrait être la même réponse, j'ai vu cela dans la recherche, mais je ne l'ai pas connecté à ma question, avec les mots-clés iPython et Shell. - TLP


Réponses:


Mettez les lignes suivantes dans votre ~/.inputrc:

## arrow up
"\e[A":history-search-backward
## arrow down
"\e[B":history-search-forward

Lignes commençant par # sont des commentaires Je ne me souviens plus de ce qui est en arrière et de ce qui est en avant. Expérimentez avec. Peut-être que vous devez basculer en arrière et en avant.


Un peu d'information de fond:

Bash utilise readline pour gérer l'invite. ~/.inputrc est le fichier de configuration de readline. Notez que cela prendra également effet dans d'autres logiciels utilisant la bibliothèque readline, par exemple IPython.

Lis le manuel bash pour plus d'informations sur readline. Là aussi vous pouvez trouver plus commandes de readline liées à l'historique.

Pour obtenir les codes d'échappement des touches fléchées, vous pouvez effectuer les opérations suivantes:

  1. Début cat dans un terminal (juste cat, pas d'autres arguments).
  2. Tapez les touches sur le clavier, vous obtiendrez des choses comme ^[[A pour flèche haut et ^[[B pour la flèche vers le bas.
  3. Remplacer ^[ avec \e.

171
2017-09-03 13:31



Génial, mais cette solution désactive les raccourcis ctrl-gauche / ctrl-droite. - Eyal
Quelqu'un peut-il me dire comment puis-je obtenir la même chose pour make - Hitesh Kumar
@lesmana, je donnerais des points supplémentaires pour la partie de chat seul - Mike D
En secondant @Eyal, n'importe qui a des conseils sur la façon dont je peux avoir cela, mais conservez les raccourcis ctrl-gauche / ctrl-droite? - kbrose
En résumé, readline a dû impliquer un défaut par défaut si .inputrc n'existait pas, mais s'est débarrassé de ces valeurs par défaut lorsque le fichier a été détecté. Outre les raccourcis de la réponse, ajoutez des lignes pour conserver les raccourcis ctrl-gauche / ctrl-droite: par ex. "\e[1;5C":forward-word et "\e[1;5D":backward-word - kbrose


Créez un fichier nommé setup_readline.sh avec le mode 644 dans /etc/profile.d/ avec le contenu suivant, connectez-vous et vérifiez vos clés préférées:

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

Je pense que c'est la meilleure façon de le faire. Surtout si vous utilisez des systèmes de gestion de configuration tels que chef, marionnette, etc.

Et la configuration du système reste intacte!


23
2018-06-02 07:58



Bizarrement, le ~ / inputrc ne fonctionnait pas pour moi - mais le fait de placer ces commandes dans .bash_profile a fait l'affaire. - Joe
.inputrc n'existe pas dans mon dossier personnel et je préfère de toute façon avoir ce type de paramètres dans .bashrc pour que je puisse simplement transporter un fichier pour mes paramètres. Donc, c'est probablement une meilleure réponse alors acceptée. - ShitalShah
.inputrc travaille fabuleusement pour moi, mais pas après que je charge screen. La chose étrange est que d'autres raccourcis .inputrc fonctionnent, mais pas ceux-ci. Donc, j'utilise les deux solutions maintenant. - Orwellophile
Cela est très utile lorsque, par exemple, vous vous connectez à un serveur pour faire des choses et que vous ne voulez pas éditer et recharger le fichier ~ / .inputrc sur le serveur. - danmactough


Ctrl + R vous donnera ce type de fonctionnalité. Commencez à taper une commande partielle et les anciennes que vous pouvez naviguer avec les flèches haut et bas. Plus d'informations: http://www.nuxified.org/blog/ctrl_r_in_the_bash_shell


13
2017-09-03 12:17



Merci pour votre réponse. Oui, je l'ai essayé, mais je le trouve un peu ... difficile. Cela ne me permettra pas de faire défiler les commandes commençant par le partiel, il ne montre que le premier. Il recherche également la commande entière du caractère, ce qui est en quelque sorte inutile. - TLP
@TLP, répéter les frappes Ctrl+r - akostadinov


Pour compléter la réponse de lesmana concernant "~ / .inputrc" que je devrais créer sous Trusty 12.04, vérifiez / ajoutez "~ / .bashrc" (la première ligne existe déjà dans mon "~ / .bashrc"):

shopt -s histappend  
PROMPT_COMMAND='history -a'  

C'est déjà expliqué en français dans https://doc.ubuntu-fr.org/terminal?&#pour_completer_les_commandes_a_partir_de_l_historique.


4
2017-10-14 08:31



Cette commande demande à bash d'ajouter immédiatement la commande au fichier historique au lieu d'attendre la fin de la session. C'est utile si vous avez beaucoup de terminaux ouverts et que vous ne voulez pas perdre l’historique en un seul mais pas nécessaire. digitalocean.com/community/tutorials/… - ShitalShah
À côté du point, mais Trusty est 14.04. 12.04 est précis. - wjandrea


Peut-être voudrez-vous essayer https://github.com/dvorka/hstr qui fournit un filtrage simple et multiligne simple de l’historique de Bash, basé sur des métriques (quand, à quelle fréquence et par la longueur des commandes) - vous pouvez utiliser les touches fléchées pour naviguer facilement dans l’historique:

enter image description here

Il peut être facilement lié à Ctrl-r et / ou Ctrl-s


0
2017-08-28 22:01