Injecter des lignes dans l'historique de bash

9

Par défaut, bash charge les lignes de l' ~/.bash_historyhistorique. Est-il possible d'ajouter un fichier personnalisé à charger également? Je souhaite injecter un fichier contenant des commandes que j'utilise fréquemment et y accéder via la recherche intégrée.

rgtk
la source
2
Généralement, les gens ajoutent des alias pour les commandes fréquemment utilisées ...
HBruijn
C'est génial. Mais ce n'est pas le cas - j'utilise des alias pour les commandes que j'utilise constamment mais j'ai beaucoup de commandes qui ont un grand nombre d'arguments que je veux modifier en fonction des circonstances.
rgtk
4
Vous devrez supprimer une sorte de modification de fichier, ce qui semble assez fou et peut ne pas fonctionner. Faites simplement de vos longues commandes un script shell qui accepte les arguments et déposez-le /usr/local/binou quelque chose comme ça
Wesley
Si vous les utilisez fréquemment, ne seraient-ils pas de toute façon dans votre histoire?
Déclarer des fonctions dans .bashrc?
Mark K Cowan

Réponses:

13

Je reste simple avec un alias h='history|grep'chargé dans mon profil Bash.

Mon workflow est donc h commandpar exemple:h hpssa

#  h hpssa
  202  05-28-2015 11:54:33  hpssacli
  217  05-28-2015 11:54:33  hpssa -start
  225  05-28-2015 11:54:33  hpssacli -stop
  226  05-28-2015 11:54:33  hpssa -stop
  228  05-28-2015 11:54:33  hpssa -start

Si je veux exécuter " hpssa -stop", je taperais simplement!226


Ceci est juste mon approche, mais vous pouvez peut-être modifier la façon dont vous vous souvenez des éléments de l'historique. Je ne pense pas qu'il soit logique d'injecter des données dans le fichier historique.

ewwhite
la source
belle astuce, voler celui-là
wim
Suggérez-vous de regarder ce que fait Ctrl-R pour effectuer une recherche dans votre historique. Préparez-vous à avoir le souffle coupé ...
2
@CameronKerr Jetez un œil à la réponse juste en dessous de celle-ci ( serverfault.com/a/695115/120438 ). L'inconvénient de l'utilisation de Ctrl + R dans ce cas particulier est qu'il vous donne les commandes pertinentes une à la fois, tandis que celles de ewwhite L'approche renvoie une liste de toutes les commandes pertinentes.
Jenny D
Bien que ce soit une excellente astuce, cela ne répond pas du tout à la question. Je ne comprends pas comment c'est la réponse la plus votée. Mon cas d'utilisation est que j'ai une image de docker qui continue de perdre son historique lorsque je la quitte. Je pensais que ce serait bien si je pouvais passer un fichier historique via la ligne de commande àdocker run ...
kumarharsh
@kumar_harsh Difficile de plaire.
ewwhite
7

Auparavant, j'étais très dépendant de Ctrl-R( reverse-search-historycommande Readline) qui effectue une recherche en arrière dans l'historique pour récupérer les commandes longues entrées précédemment, mais je préfère maintenant utiliser des alias et des scripts / fonctions shell. Quoi qu'il en soit, la historycommande intégrée Bash peut être utilisée pour charger une liste de commandes personnalisées dans votre historique actuel.

history -r [filename]

Depuis la page de manuel de bash:

Lisez le contenu du fichier d'historique et ajoutez-le à la liste d'historique actuelle.

Automatisation de démarrage

J'ai juste essayé de lancer cette commande automatiquement en l'ajoutant comme dernière ligne dans mon .bashrc. Cependant, les commandes de mon fichier d'historique personnalisé n'étaient pas disponibles lorsque j'ai démarré un nouveau shell. Il semble que l'historique du shell ne soit chargé qu'à partir du .bash_historyfichier par défaut : après le traitement des fichiers de démarrage et juste avant que l'invite soit présentée pour le shell interactif. Malheureusement, il semble qu'il n'y ait pas de moyen facile d'automatiser cela.

Anthony Geoghegan
la source
2

Comme l'a observé @AnthonyGeoghegan, l'historique est chargé après le traitement des fichiers de démarrage. Cela offre une manière différente de précharger l'historique souhaité dans un fichier de démarrage:

mv .bash_history .bash_history.tmp
cat .extra_hist .bash_history.tmp > .bash_history
# or swap them, to put the extra stuff at the end of the history, for
# quicker ^R access.

Notez que cette approche peut entraîner l'ajout de plusieurs copies de vos commandes spéciales à votre .bash_history au fil du temps. Vous pouvez encapsuler vos commandes spéciales avec des lignes de commentaires, afin que vous puissiez facilement les trouver et les supprimer (via, par exemple, sed) dans le cadre du remplissage du fichier .bash_history. Quelque chose comme:

cp .extra_hist .bash_history
sed '/: remove from here/,/:remove to here/d' .bash_history >> .bash_history
schnitz
la source