bash history para la sesión actual

15

Tal vez estoy pasando por alto algo, pero ¿hay alguna manera de obtener su historial de bash actual para la sesión actual que está utilizando como

si corro

ssh host
$ pwd
$ ls
$ cd /tmp

Solo quiero ver esos 3 comandos y nada más

Miguel
fuente
¿has comprobado el historycomando?
Hackaholic
ya lo sé, historypero eso no da solo mi sesión
Mike
La cantidad guardada entre sesiones es controlada por la variable de shell SAVEHIST si recuerdo. Por lo tanto, si la cantidad de historial que guardó la última vez fue CERO, entonces obtendría el historial de la sesión de shell actual (pero, por supuesto, no en los niveles secundarios)
mdpc
@mdpc, ¿qué documentos estás leyendo? En la página de manual de Bash no encuentro ninguna referencia a SAVEHIST sino solo a HISTSIZEy HISTFILESIZE.
Comodín

Respuestas:

15

Una forma ligeramente indirecta:

history -a ~/current_history

Esto guardará el historial de bash no guardado de la sesión actual ~/current_history, que luego puede ver.

muru
fuente
esto podría funcionar, pero no maneja varias sesiones. Supuse que puedo crear un archivo temporal aleatorio para almacenarlo
Mike
1
@ Mike usa un nombre conectado con el PID del shell, tal vez ~/$$_history.
muru
44
¡Vale la pena señalar que esto no borrará el historial ni afectará el ahorro de historial normal de ninguna manera! No estaba seguro hasta que lo probé. :)
NHDaly
Me parece más conveniente simplemente hacerlo history -a, junto con el historial anterior en ~ / .bash_history ... lo que podría ser un problema si su historial es más largo que el límite, que es 1000 en mis sistemas centos7 y fedora 24.
Ray Foss
0

Tuve el problema de que quería escribir la corriente historyen un archivo pero aún quería que las entradas se registraran en el bash principalhistory

Resolví esto simplemente adjuntando el archivo con cat:

history -a current-history
cat current-history >> .bash_history
nath
fuente
-1

Utilícelo comppara comparar todo el historial (incluida la sesión actual de Bash) con el historial ya persistente .bash_historyy solo imprima las líneas que son exclusivas de la sesión actual, que deberían mostrar solo aquellos comandos que se ejecutaron desde que inició el shell Bash actual

comm -23 <( history | cut -c 8- ) ~/.bash_history

Editar: como señaló @Wildcard, este comando no funciona para todas las distribuciones de comm. Probé esto en Mac OS.

Una variación de la misma idea usando diff:

diff <( history | cut -c 8- ) ~/.bash_history | sed -n 's/^< //pg'
Christian Kadner
fuente
Un buen pensamiento, pero muy poco confiable en mis pruebas. commasume una entrada ordenada. Pero, ¡bienvenido a Stack Exchange! :)
Comodín
@Wildcard, ambos lados de la entrada commse ordenan inherentemente en mi ejemplo anterior. ¿Lo corriste? ¿Y no produjo su historial actual de sesiones de Bash?
Christian Kadner
Sí, lo hice, y no, no fue así. Y no, el contenido de no~/.bash_history está ordenado; y tampoco se ordena la salida de una vez que se eliminan los números de línea iniciales. (Además de lo cual, espera una entrada ordenada lexicográficamente, no una entrada ordenada numéricamente.)historycomm
Comodín
Bien, quise decir que ambos argumentos del commcomando en mi ejemplo están en el mismo orden, no que estén ordenados lexicográficamente. La versión de FreeBSD commno requiere entrada clasificada lexicográficamente
Christian Kadner
Estoy usando Mac OS X. No tiene nada que ver con eso. Mirando más de cerca, parecen ser los primeros comandos del historial en memoria, que desde entonces han sido sobrescritos en el archivo de historial por otros shells que salen.
Comodín