¿Cómo puedo modificar el contenido de mi bash_historyarchivo? ¿Qué valores o variables controlan cuánto dura el historial? ¿Hay alguna otra cosa que pueda cambiar para proporcionar un mejor control de mi historial de BASH?
11
¿Cómo puedo modificar el contenido de mi bash_historyarchivo? ¿Qué valores o variables controlan cuánto dura el historial? ¿Hay alguna otra cosa que pueda cambiar para proporcionar un mejor control de mi historial de BASH?
HISTSIZEyHISTFILESIZEson las únicas superficies de control que tiene para controlar la cantidad de historial que se mantiene.Respuestas:
Hay dos variables que controlan el tamaño del historial:
y
Estas dos variables le permiten controlar el comportamiento de su historial. Básicamente,
HISTSIZEes el número de comandos guardados durante su sesión actual yHISTFILESIZEes el número de comandos que se recordarán en todas las sesiones. Así por ejemplo:En el ejemplo anterior, dado que
HISTSIZEse establece en 10,historydevuelve una lista de 10 comandos. Sin embargo, si cierra sesión y luego vuelve a iniciar sesión,historysolo devolverá 5 comandos porqueHISTFILESIZEestá configurado en 5. Esto se debe a que, una vez que sale de su sesión, susHISTFILESIZElíneas de su historial se guardan en su archivo de historial (~/.bash_historyde forma predeterminada, pero controlado porHISTFILE) En otras palabras, los comandos se agreganHISTFILEhasta que llegue a las$HISTFILESIZElíneas en ese punto, cada línea posterior agregada significa que se eliminará el primer comando del archivo.Puede establecer los valores de estas variables en su
~/.profile(o~/.bash_profilesi ese archivo existe). No los establezca en su~/.bashrcprimer lugar porque no tienen nada que establecer allí y, en segundo lugar, porque eso provocaría un comportamiento diferente en los shells de inicio de sesión y no inicio de sesión, lo que puede ocasionar otros problemas .Otras variables útiles que le permiten ajustar el comportamiento de su historial son:
HISTIGNORE: Esto le permite ignorar ciertos comandos comunes que rara vez son de interés. Por ejemplo, podría establecer:Eso haría que cualquier comando a partir de
pwd,dfoduque se ignoran y no se guarda en su historia.HISTCONTROL: Este te permite elegir cómo funciona el historial. Personalmente, lo configuré en loHISTCONTROL=ignoredupsque hace que guarde comandos duplicados solo una vez. Otras opciones sonignorespaceignorar los comandos que comienzan con espacios en blanco yerasedupsque provocan que todas las líneas anteriores que coincidan con la línea actual se eliminen de la lista del historial antes de que esa línea se guarde.ignorebothes la abreviatura de ignorespace e ignoredups.HISTTIMEFORMAT: Esto le permite configurar el formato de hora del archivo de historial. Vea la respuesta de Pandya o leaman bashpara más detalles.Para más ajustes, tiene:
La
histappendopción bash. Esto se puede configurar ejecutandoshopt -s histappendo agregando ese comando a su~/.bashrc. Si esta opción está configuradaEsto es muy útil ya que le permite combinar las historias de diferentes sesiones (piense en diferentes terminales, por ejemplo).
El
historycomando tiene dos opciones útiles:history -a: hace que el último comando se escriba automáticamente en el archivo de historialhistory -r: importa el archivo de historial a la sesión actual.Podría, por ejemplo, agregar estos dos comandos a su
PROMPT_COMMAND(que se ejecuta cada vez que su shell muestra el indicador, por lo que cada vez que inicia un nuevo shell y después de cada comando que ejecuta en él):Combinados, se aseguran de que cualquier nueva terminal que abra importará inmediatamente el historial de cualquier otra sesión de shell. El resultado es un historial común en todas las terminales / sesiones de shell.
fuente
El tamaño predeterminado del archivo de historial es de 500 líneas. Una vez que el archivo .bash_history alcanza las 500 líneas, las primeras entradas se eliminan para dejar espacio a las líneas más nuevas, como en FIFO. Puede cambiar esto cambiando el valor de la variable
HISTFILESIZEque por defecto tiene el valor 500.Poner un
HISTFILESIZE=10000en su .bashrc aumentará el número de líneas que el archivo de historial puede contener a 10000, lo que aumenta la vida útil de su contenido.fuente
HISTSIZEel límite, considere cambiarHISTFILEtambién. Si ejecutabash --norcHISTSIZEvolverá al valor predeterminado, truncando suHISTFILEsalida./etc/bash.bashrcestablece unHISTFILESIZE(o tal vezHISTSIZE; no he comprobado cuál), entonces Bash parece truncarse.bash_historyen el punto que lee/etc/bash.bashrc(o al menos en algún momento antes de que su nuevo límite se establezca en sus propios archivos de inicio de Bash). Para evitar esto, nuevamente, configure el suyoHISTFILEpara que su historial real vaya allí y no en el.bash_historyarchivo que Bash está truncando.export, ya que hacerlo lo haría visible para cualquier niño conchas, que luego podría verse truncado en lugar de hacerlo.bash_history!)Lea
man bashpara obtener más detalles sobre la historia de bash como:HISTCONTROL Una lista de valores separados por dos puntos que controlan cómo se guardan los comandos en la lista del historial. Si la lista de valores incluye ignorespace, las líneas que comienzan con un carácter de espacio son no guardado en la lista del historial. Un valor de ignoredups provoca líneas que coinciden con las anteriores la entrada del historial no se guardará. Un valor de ignoreboth es la abreviatura de ignorespace y ignoredups. Un valor de borrados hace que todas las líneas anteriores que coincidan con la línea actual se eliminará de la lista del historial antes de guardar esa línea. Cualquier valor que no esté en lo anterior La lista se ignora. Si HISTCONTROL no está configurado o no incluye un valor válido, todas las líneas leído por el analizador de shell se guardan en la lista del historial, sujeto al valor de HISTIG‐ NORE La segunda línea y las siguientes de un comando compuesto de varias líneas no se prueban, y se agregan al historial independientemente del valor de HISTCONTROL. Archivo Histórico El nombre del archivo en el que se guarda el historial de comandos (ver HISTORIAL a continuación). El valor por defecto el valor es ~ / .bash_history. Si no está configurado, el historial de comandos no se guarda cuando sale un shell. HISTFILESIZE El número máximo de líneas contenidas en el archivo de historial. Cuando se asigna esta variable un valor, el archivo de historial se trunca, si es necesario, para contener no más que ese número de líneas eliminando las entradas más antiguas. El archivo de historial también se trunca a este tamaño. después de escribirlo cuando sale un shell. Si el valor es 0, el archivo de historial se trunca en tamaño cero Los valores no numéricos y los valores numéricos inferiores a cero inhiben el truncamiento. los shell establece el valor predeterminado en el valor de HISTSIZE después de leer los archivos de inicio. HISTIGNORE Una lista de patrones separados por dos puntos utilizados para decidir qué líneas de comando se deben guardar en La lista de la historia. Cada patrón está anclado al comienzo de la línea y debe coincidir la línea completa (no se agrega '*' implícito). Cada patrón se prueba contra la línea después de aplicar los controles especificados por HISTCONTROL. Además del caparazón normal caracteres de coincidencia de patrones, `& 'coincide con la línea del historial anterior. `& 'se puede escapar usando una barra invertida; la barra invertida se elimina antes de intentar una coincidencia. El segundo y las líneas posteriores de un comando compuesto de varias líneas no se prueban y se agregan a historia independientemente del valor de HISTIGNORE. HISTSIZE El número de comandos para recordar en el historial de comandos (ver HISTORIAL a continuación). Si el el valor es 0, los comandos no se guardan en la lista del historial. Valores numéricos menores que cero da como resultado que cada comando se guarde en la lista del historial (no hay límite). La cáscara establece el valor predeterminado en 500 después de leer los archivos de inicio. HISTTIMEFORMAT Si esta variable se establece y no es nula, su valor se usa como una cadena de formato para strftime (3) para imprimir la marca de tiempo asociada con cada entrada del historial que muestra el historial incorporado. Si se establece esta variable, las marcas de tiempo se escriben en el archivo de historial para que puedan ser preservado en las sesiones de shell. Esto usa el carácter de comentario del historial para distinguir marcas de tiempo guish de otras líneas de la historia.En particular
HISTFILESIZEyHISTSIZEque estás buscando y te ayuda.fuente