¿Por qué alguien no establecería 'histappend' en bash?

36

Después de descubrir lo que esto shopt -s histappend significa , parece una configuración muy sensata, y me sorprende que no sea por defecto. ¿Por qué alguien querría borrar su historial en cada salida de shell?

tshepang
fuente
Aparte del malentendido de lo que hace esta opción, corregida por @maxscchlepzig, "default" tiene al menos dos fuentes: bash"puro" o una distribución suministrada .bashrc. para el primero, @Gilles probablemente sea correcto. en este último sentido, -s histappend está predeterminado en, por ejemplo, Debian, desde 2008: bugs.debian.org/cgi-bin/bugreport.cgi?bug=452459
underscore_d
3
Bueno, ¿Unix no es exactamente famoso por sus valores predeterminados? Llegué a esperar los valores predeterminados más hostiles por defecto: P (exagerado menor)
olejorgenb

Respuestas:

34

Bueno, cuando histappendno está configurado, esto no significa que el historial se borre en cada salida de shell. Sin histappendbash lee el archivo histórico al inicio en la memoria, durante la operación, se agregan nuevas entradas, y al salir del shell, las últimas líneas HISTSIZE se escriben en el archivo de historial sin agregar, es decir, reemplazar el contenido anterior.

Por ejemplo, si el archivo histórico contiene 400 entradas, durante el tiempo de ejecución de bash se agregan 10 nuevas entradas: histsize se establece en 500, entonces el nuevo archivo histórico contiene 410 entradas.

Este comportamiento solo es problemático si usa más instancias de bash en paralelo. En ese caso, el archivo de historial solo contiene el contenido del último shell existente.

Independientemente de esto: hay algunas personas que quieren borrar su historial en la salida de shell por razones de privacidad.

maxschlepzig
fuente
Además, por razones de seguridad, puede ser una buena idea no guardar el historial para el usuario root. Esta característica permite que root tenga un historial de shell sin que se guarde en el disco.
Mei
1
+1 para "no significa que el historial se borre en cada salida de shell". Esto se explica perfectamente bien en otros lugares, pero tal vez no de manera sucinta como para llegar a algunos lectores, especialmente en el contexto del nombre de la opción (OK, podría haber sido uno de esos lectores por un tiempo). @Mei, ¿cómo tiene alguna importancia la permutación de histappendsi rootla historia llega a un disco? Nuevamente, solo afecta lo que está escrito, no si .
underscore_d
55
¿Alguien ejecuta menos de 2 instancias de bash? histappendasí como HISTCONTROL=ignoredups:erasedups:ignorespaceparece ser un buen defecto para la mayoría de las personas.
guiones
¿Es histappendefectivo sin sentido si tengo HISTFILESIZE=y HISTSIZE=para una historia infinita?
Marc.2377
1
@dashesy Personalmente no me gusta ignorar / borrar entradas duplicadas. Tengo HISTTIMEFORMAT habilitado, y me gusta poder regresar y ver cuándo emití un comando ... y si lo emití varias veces, me gustaría saber cuándo se emitió cada uno. Es una preferencia personal, a la que pertenecen. ;)
msb
9

Por compatibilidad histórica, supongo. La histappendopción no existía hasta bash 2.0.

Gilles 'SO- deja de ser malvado'
fuente
1
¿Se sobrescribió la historia cada vez?
tshepang
3
@ Tshepang: Sí, igual que ahora si no lo usas histappend.
Gilles 'SO- deja de ser malvado'
debería ser el valor predeterminado ahora pero no lo es
guioneso