GNU/Linux >> Linux Esercitazione >  >> Linux

Cronologia dell'archivio senza uscire dalla shell?

Mi sono appena reso conto che un flusso di lavoro che utilizzo da anni non fa quello che dovrebbe fare. Dato che non me ne rendevo conto da così tanto tempo, potresti pensare che non valga la pena impegnarsi molto, ma si scopre che in questo momento è diventato in qualche modo importante.

Di cosa sto parlando? Ok, ho tmux in esecuzione con più sessioni e ogni sessione ha finestre diverse e così via. Lavorare così è meraviglioso. C'è un aspetto negativo, però. Quando il server viene riavviato, per qualsiasi motivo, chiude tutte le mie sessioni. Abbastanza giusto, non può essere evitato e non accade spesso. Tuttavia, la parte fastidiosa è che tutto il mio zsh o bash history è andato pure. Questo è un problema. Mi affido alla mia storia, forse fin troppo.

Stavo aggirando questo problema premendo fc -W (in zsh ) di tanto in tanto. Ho pensato che questo avrebbe aggiunto la storia che è nella memoria e poi avrei perso solo la parte tra la mia ultima invocazione di fc -W e il riavvio del server. Ma non è quello che fa. Se uso fc -W in una finestra, quindi fc -W in un altro, la cronologia della prima finestra verrebbe sovrascritta dalla cronologia della seconda finestra. Avrei bisogno di usare fc -R prima, ma questo duplicherebbe l'intera cronologia... in pratica stavo abusando di fc comanda tutto il tempo.

Ecco la domanda:come posso assicurarmi di non perdere nulla della mia cronologia quando sono in tmux e c'è un'improvvisa interruzione di corrente? Nota:

  • Uso la cronologia infinita, nel caso sia importante.
  • Perdere parte della cronologia va bene, cioè se devo invocare un comando a mano (o in un cronjob) e perdo la parte della cronologia dall'ultima esecuzione del comando, va bene.
  • Uscire dal terminale e aprirne uno nuovo non è la soluzione.
  • Non voglio memorizzare i miei comandi direttamente nella cronologia, poiché questo mescola storie diverse.
  • Soluzioni per entrambi bash e zsh prego. zsh è preferito.

Modifica:evidenzia la parte che tutti sembrano fraintendere.

Risposta accettata:

In zsh, usa fc -AI per salvare la cronologia, non fc -W . Usa -A , non -W , altrimenti la cronologia di altre istanze della shell viene sovrascritta. E -I salva solo le nuove voci della cronologia dall'ultimo salvataggio.

Correlati:Script BASH:come assegnare ogni riga di output del comando ai valori in un array?

Dato il tuo flusso di lavoro, invece di salvare manualmente, dovresti probabilmente salvare la cronologia automaticamente. Attiva inc_append_history opzione per salvare ogni comando nel file di cronologia immediatamente prima che venga eseguito.

Sebbene sia possibile ottenere lo stesso effetto in bash, condividere correttamente la cronologia tra le istanze di bash è più difficile. Vedi Conserva la cronologia di bash in più finestre di terminale


Linux
  1. Il punto del comando esterno `cd`?

  2. Precedenza degli operatori logici della shell &&, ||?

  3. Controlla la cronologia degli accessi sul tuo server

  4. Come riavviare GNOME Shell dalla riga di comando senza uscire dalle applicazioni (solo X11)

  5. Come posso elencare i file in un archivio zip senza decomprimerlo?

Come utilizzare il comando cronologia di Linux

Storia delle patch live del kernel Linux

Che cos'è la shell in Linux?

Eternal Terminal:una shell remota che si riconnette automaticamente senza interrompere la sessione

Il ciclo while negli script della shell

Torna alla directory precedente nella shell