Iniettare linee per bash cronologia


9

Di default bash carica le righe dalla ~/.bash_historycronologia. È possibile aggiungere anche file personalizzati da caricare? Voglio iniettare il file contenente i comandi che utilizzo frequentemente e accedervi tramite la ricerca integrata.


2
In genere le persone aggiungono alias per i comandi usati di frequente ...
HBruijn,

È fantastico. Ma non è così: uso gli alias per i comandi che uso costantemente, ma ho molti comandi che hanno un gran numero di argomenti che voglio modificare in base alle circostanze.
RTK

4
Dovresti provare una sorta di modifica del file, che sembra piuttosto folle e potrebbe non funzionare. Trasforma i tuoi comandi lunghi in uno script di shell che accetta argomenti e inseriscili /usr/local/bino altro
Wesley,

Se li usi frequentemente, non sarebbero comunque nella tua storia?

Dichiarare le funzioni in .bashrc?
Mark K Cowan,

Risposte:


13

Lo mantengo semplice con un alias h='history|grep'caricato nel mio profilo Bash.

Quindi il mio flusso di lavoro è h command, ad esempio:h hpssa

#  h hpssa
  202  05-28-2015 11:54:33  hpssacli
  217  05-28-2015 11:54:33  hpssa -start
  225  05-28-2015 11:54:33  hpssacli -stop
  226  05-28-2015 11:54:33  hpssa -stop
  228  05-28-2015 11:54:33  hpssa -start

Se voglio eseguire " hpssa -stop", semplicemente digitare!226


Questo è solo il mio approccio, ma forse potresti modificare il modo in cui stai richiamando gli elementi della cronologia. Non penso che abbia senso inserire dati nel file della cronologia.


bel trucco, rubando quello
wim

Suggerisci di dare un'occhiata a cosa fa Ctrl-R per la ricerca nella tua cronologia. Preparati a farti saltare la testa ...

2
@CameronKerr Dai un'occhiata alla risposta appena sotto questa ( serverfault.com/a/695115/120438 ). L' aspetto negativo di usare Ctrl + R in questo caso particolare è che ti dà i comandi pertinenti uno alla volta, mentre ewwhite è approccio restituisce un elenco di tutti i comandi rilevanti.
Jenny D,

Anche se questo è un grande trucco, non risponde affatto alla domanda. Non riesco a capire come questa sia la risposta più votata. Il mio caso d'uso è che ho un'immagine docker che continua a perdere la sua storia quando la esco. Ho pensato che sarebbe stato bello poter passare un file di cronologia dalla riga di comando adocker run ...
kumarharsh,

@kumar_harsh Difficile da accontentare.
ewwhite,

7

Facevo molto affidamento su Ctrl-R( reverse-search-historycomando Readline) che cerca indietro nella cronologia per recuperare comandi lunghi immessi in precedenza, ma ora preferisco usare alias e script / funzioni della shell. In ogni caso, il historycomando incorporato di Bash può essere utilizzato per caricare un elenco di comandi personalizzati nella cronologia corrente.

history -r [filename]

Dalla pagina man di bash:

Leggi i contenuti del file cronologico e aggiungili all'elenco cronologico corrente.

Automazione all'avvio

Ho appena provato ad avviare questo comando automaticamente aggiungendolo come ultima riga nel mio .bashrc. Tuttavia, i comandi dal mio file di cronologia personalizzato non erano disponibili quando ho avviato una nuova shell. Sembra che la cronologia della shell sia caricata solo dal .bash_historyfile predefinito : dopo che i file di avvio sono stati elaborati e poco prima che venga presentato il prompt per la shell interattiva. Sfortunatamente, sembra che non ci sia un modo semplice per automatizzare questo.


2

Come osservato da @AnthonyGeoghegan, la cronologia viene caricata dopo l'elaborazione dei file di avvio. Ciò offre un modo diverso di precaricare la cronologia desiderata in un file di avvio:

mv .bash_history .bash_history.tmp
cat .extra_hist .bash_history.tmp > .bash_history
# or swap them, to put the extra stuff at the end of the history, for
# quicker ^R access.

Nota che questo approccio potrebbe comportare l'aggiunta nel tempo di più copie dei tuoi comandi speciali al tuo .bash_history. È possibile racchiudere i comandi speciali con righe di commento, in modo da poterli trovare e rimuovere facilmente (tramite, ad esempio, sed) durante la compilazione del file .bash_history. Qualcosa di simile a:

cp .extra_hist .bash_history
sed '/: remove from here/,/:remove to here/d' .bash_history >> .bash_history
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.