Inyectar líneas a bash history

9

Por defecto, bash carga líneas desde el ~/.bash_historyhistorial. ¿Es posible agregar un archivo personalizado para cargar también? Quiero inyectar archivos que contienen comandos que uso con frecuencia y acceder a ellos mediante la búsqueda integrada.

rgtk
fuente
2
Por lo general, las personas agregan alias para los comandos de uso frecuente ...
HBruijn
Eso es genial. Pero ese no es el caso: uso alias para los comandos que uso constantemente, pero tengo muchos comandos que tienen una gran cantidad de argumentos que quiero modificar en función de las circunstancias.
rgtk
44
Tendría que modificar algún tipo de modificación de archivo, que suena bastante loco y puede no funcionar. Simplemente haga que sus comandos largos sean un script de shell que acepte argumentos y suéltelos /usr/local/bino algo así
Wesley
Si los usa con frecuencia, ¿no estarían en su historia de todos modos?
Declarar funciones en .bashrc?
Mark K Cowan

Respuestas:

13

Lo mantengo simple con un alias h='history|grep'perfil cargado en mi Bash.

Entonces mi flujo de trabajo es h command, por ejemplo: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 quiero ejecutar " hpssa -stop", simplemente escribiría!226


Este es solo mi enfoque, pero tal vez podría modificar cómo está recuperando elementos del historial. No creo que tenga sentido inyectar datos en el archivo de historial.

ewwhite
fuente
buen truco, robar esa
wim
Sugiera que desee echar un vistazo a lo que hace Ctrl-R para buscar en su historial. Prepárese para enloquecer ...
2
@CameronKerr Eche un vistazo a la respuesta justo debajo de esta ( serverfault.com/a/695115/120438 ). La desventaja de usar Ctrl + R en este caso particular es que le da los comandos relevantes uno por uno, mientras que ewwhite's enfoque devuelve una lista de todos los comandos relevantes.
Jenny D
Aunque este es un gran truco, no responde a la pregunta en absoluto. No entiendo cómo esta es la respuesta más votada. Mi caso de uso es que tengo una imagen acoplable que sigue perdiendo su historial cuando salgo de ella. Pensé que sería bueno si pudiera pasar un archivo historial a través de la línea de comandos adocker run ...
kumarharsh
@kumar_harsh Difícil de complacer.
ewwhite
7

Solía ​​depender mucho de Ctrl-R( reverse-search-historycomando Readline) que busca hacia atrás en el historial para recuperar comandos largos ingresados ​​anteriormente, pero ahora prefiero usar alias y scripts / funciones de shell. De todos modos, el historycomando incorporado Bash se puede usar para cargar una lista de comandos personalizados en su historial actual.

history -r [filename]

Desde la página de manual de bash:

Lea el contenido del archivo de historial y añádalo a la lista de historial actual.

Puesta en marcha de la automatización

Acabo de intentar iniciar este comando automáticamente agregándolo como la última línea en mi .bashrc. Sin embargo, los comandos de mi archivo de historial personalizado no estaban disponibles cuando comencé un nuevo shell. Parece que el historial del shell solo se carga desde el .bash_historyarchivo predeterminado : después de que se hayan procesado los archivos de inicio y justo antes de que se presente la solicitud para el shell interactivo. Desafortunadamente, parece que no hay una manera fácil de automatizar esto.

Anthony Geoghegan
fuente
2

Como observó @AnthonyGeoghegan, el historial se carga después de procesar los archivos de inicio. Eso ofrece una forma diferente de precargar el historial deseado en un archivo de inicio:

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.

Tenga en cuenta que este enfoque podría dar como resultado que se agreguen múltiples copias de sus comandos especiales a su .bash_history, con el tiempo. Puede envolver sus comandos especiales con líneas de comentarios, para que pueda encontrarlos y eliminarlos fácilmente (por ejemplo, sed) como parte del llenado del archivo .bash_history. Algo como:

cp .extra_hist .bash_history
sed '/: remove from here/,/:remove to here/d' .bash_history >> .bash_history
Schnitz
fuente