¿Puedo buscar fácilmente mi historial en muchas ventanas de pantalla?

11

Mi screensesión actual tiene 12 ventanas abiertas. Se ha estado ejecutando durante semanas ... Sé que ejecuté un convertcomando ImageMagick en una de estas 12 ventanas de pantalla en algún momento de la semana pasada ... ¿hay alguna forma de que pueda buscar fácilmente en el historial de Bash de las 12 instancias, sin cerrarlas o ejecutarlas? history | grep converten las 12 pantallas?

Josh
fuente
1
Yo uso Zsh y lo tengo setopt share_historydentro, /etc/zsh/zshrcasí que este problema nunca debería
sucederme

Respuestas:

18

Puede ejecutar history -a; history -cen todas las ventanas para guardar el historial. Y luego history -rpara refrescarlo.

Para resolverlo de manera más permanente, agregue esto a su .bashrc:

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
Gert
fuente
2
Esto es genial, gracias! El único problema es que si escribe algo en un shell y luego va a otro y escribe el historial de inmediato, no aparecerá en el historial. Esto se debe a que PROMPT_COMMAND aún no se ha ejecutado, por lo que no se ha producido la actualización. Tendrá que presionar regresar en la segunda ventana (o ejecutar otro comando) primero, luego escribir historial.
Javid Jamae
1

Suena dificil. Aquí hay un par de métodos que pueden funcionar para usted.

Si tiene instaladas herramientas de contabilidad de procesos (en Linux, busque un paquete llamado acct) y el permiso para usarlas, puede averiguar cuándo y posiblemente en qué terminal ejecutó convert:

lastcomm convert

Si esto no está disponible o no es concluyente, puede ejecutar un historycomando en cada instancia de bash para buscar convertcomandos. Esto también encontrará comandos que estaban en el archivo de historial cuando bash comenzó.

: >/tmp/convert.history
for w in $(seq 0 11); do
  screen -p $w -X stuff \
    'history | sed 's/^.*convert/'$w'&/" >>/tmp/convert.history
'; done
  • $(seq 0 11)itera sobre los números de las ventanas de su pantalla. Asegúrese de omitir las ventanas que actualmente no ejecutan bash, pero algún otro proceso que interprete la entrada de manera diferente.
  • screen -p $w stuff …envía la siguiente cadena como entrada a la ventana especificada. Necesita la nueva línea al final de la cadena.
  • El archivo /tmp/convert.historycontendrá una lista de líneas como 3 convert foo.jpg, si ejecutó convert foo.jpgen la ventana 3.
Gilles 'SO- deja de ser malvado'
fuente
1
Lamentablemente estos no funcionaron. :-( Me acaba de terminar corriendo history | grep convert. En todas las ventanas Estoy decepcionado, quería aceptar otra gran respuesta por Gilles!
Josh
1

tcsh le permite compartir el historial entre sesiones mediante el uso del alias periódico.

En su archivo .cshrc (o .tcshrc):

set tperiod = 60 #(or any other number.  Time in minutes between refreshing)
alias periodic 'history -S; echo "Syncing history"'

Esto ejecutará automáticamente el comando de historial cada 60 minutos. Esto guardará el historial en un archivo de historial común en su directorio de inicio. Para actualizar el historial con más frecuencia, reduzca el número de período o simplemente ejecute el comando "periódico" para actualizar manualmente

Michael Toth
fuente
0

Bash solo escribe la historia cuando sale, lo que hace que esto sea problemático en el mejor de los casos. He oído que zsh puede compartir el historial entre sesiones activas.

bahamat
fuente