Posso cercare facilmente la mia cronologia su molte finestre dello schermo?


11

La mia screensessione corrente ha 12 finestre aperte. È in esecuzione da settimane ... So di aver eseguito un convertcomando ImageMagick in una di queste 12 finestre dello schermo la settimana scorsa ... c'è un modo in cui posso facilmente cercare nella cronologia di Bash di tutte e 12 le istanze, senza chiuderle o eseguirle history | grep convertin tutti e 12 gli schermi?


1
Io uso Zsh e ho setopt share_historyin /etc/zsh/zshrcmodo da questo problema non dovrebbe mai accadere a me: P
phunehehe

Risposte:


18

È possibile eseguire history -a; history -cin tutte le finestre per salvare la cronologia. E poi history -rper rinfrescarlo.

Per risolverlo in modo permanente aggiungi questo al tuo .bashrc:

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

2
Questo è fantastico, grazie! L'unico problema è che se si digita qualcosa in una shell e poi si passa a un'altra e si digita immediatamente la cronologia, questa non verrà visualizzata nella cronologia. Questo perché PROMPT_COMMAND non è stato ancora eseguito, quindi l'aggiornamento non si è verificato. Dovrai premere Invio nella seconda finestra (o eseguire prima un altro comando), quindi digitare cronologia.
Javid Jamae,

1

Sembra difficile. Ecco un paio di metodi che potrebbero funzionare per te.

Se hai installato strumenti di contabilità di processo (su Linux, cerca un pacchetto chiamato acct) e il permesso di usarli, puoi scoprire quando e possibilmente su quale terminale hai eseguito convert:

lastcomm convert

Se questo non è disponibile o non conclusivo, puoi eseguire un historycomando in ogni istanza di bash per cercare convertcomandi. Questo troverà anche i comandi presenti nel file della cronologia all'avvio di bash.

: >/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)scorre i numeri delle finestre dello schermo. Assicurati di saltare le finestre che attualmente non eseguono bash ma alcuni altri processi che interpreterebbero l'input in modo diverso.
  • screen -p $w stuff …invia la seguente stringa come input alla finestra specificata. È necessaria la nuova riga alla fine della stringa.
  • Il file /tmp/convert.historyconterrà un elenco di righe come 3 convert foo.jpg, se eseguito convert foo.jpgnella finestra 3.

1
Purtroppo questi non hanno funzionato. :-( Ho appena finito di correre history | grep convertin tutte le finestre. Sono deluso, volevo accettare un'altra grande risposta di Gilles!
Josh,

1

tcsh ti consente di condividere la cronologia tra le sessioni attraverso l'uso dell'alias periodico.

Nel tuo file .cshrc (o .tcshrc):

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

Ciò eseguirà automaticamente il comando cronologia ogni 60 minuti. Ciò salverà la cronologia in un file cronologico comune nella tua home directory. Per aggiornare la cronologia più spesso, ridurre il numero di tperiodi o semplicemente eseguire il comando "periodico" per aggiornare manualmente


0

Bash scrive la cronologia solo quando esce, il che rende questo problematico nella migliore delle ipotesi. Ho sentito che zsh può condividere la storia tra sessioni attive.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.