it-swarm-eu.dev

Nejlepší způsob, jak prohlédnout historii Shell

Existuje lepší způsob hledání příkazu v mém souboru historie než grep? Mám ponětí, co příkaz začíná, ale nevím, jak daleko v historii je.

pdate: byl dříve zsh specifický, ale vzhledem k překrývajícím se odpovědím neváhejte odpovědět na jakékoli Shell (nebo režim (vi/emacs)) zde, jen si všimněte, jestli je specifický.

82
xenoterracide

Ctrl+R je obvykle nejlepší způsob, jak řekl deskriptor . Můžete také použít !string, který spouští poslední příkaz začínající string, nebo !?string?, který spouští nejnovější příkaz, který obsahuje string.

(Myslím, že to je jediné, co je pro tuto otázku relevantní, ale v tato odpověď ) jsem pokrýval mnohem více příkazů historie.

78
Michael Mrozek

Při použití Bash zadejte Control-R a poté začněte psát. Psaní na stroji Control-R opakovaně po zadání se nějaký text přesune zpět do odpovídajících příkazových řádků.

32
grendel

Nejste si jisti, jestli to pomůže, ale rád to používám ctrl-r a poté začněte psát příkaz. Mělo by to projít vaší historií a představit vám první zápas. Chcete-li přepínat mezi zápasy stačí zasáhnout ctrl-r znovu.

18
decriptor

Pokud do ~/.inputrc Přidáte následující

"\e[5~": history-search-backward
"\e[6~": history-search-forward

a restartujte Bash, můžete začít psát a pak použít Page Up a Page Down pohybovat dozadu a vpřed v historii řádků začínající stejnou předponou, kterou jste právě zadali.

(Někteří mohou raději používat \e[A A \e[B, Které nahradí normální Up a Down akce namísto vázání nových klíčů.)

17
ephemient

Interaktivní výzva vyvolaná Ctrl-R, který již byl zmíněn, je nejpohodlnější způsob. Navíc je populární remapovat Up a Down klávesy se šipkami k prohledávání historie předpony aktuálně na příkazovém řádku, to však vyžaduje některé změny ~/.inputrc file .

Klasickým a méně interaktivním řešením je použití rozšíření historie Shell. Psaní na stroji

!foo

provede poslední příkaz začínající foo a

!?foo

provede poslední příkaz, který obsahuje foo. Více informací o rozšiřování historie naleznete v referenční příručka Bash , za předpokladu, že je Shell Bash nebo kompatibilní.

9
Adam Byrtek

Pokud přidáte stty -ixon tvému ​​~/.bashrc soubor Ctrl-s půjde opačným směrem Ctrl-r.

Pokud zadáte !ls pak bash prohlédne vaši historii a provede poslední příkaz, který začíná „ls“

3
Kevin M

může být zsh specifický. Při výzkumu tato odpověď I nalezenovi-history-search-backward, které umožňuje hledat / v režimu vi (který jsem nezmínil, že jsem byl) můžete použít n a N pro vyhledávání vpřed a vzad (po stisknutí enter).

2
xenoterracide

Jsem překvapen, že to nebylo zmíněno - ale můžete si vybrat režim vi v bash nebo ksh tím, že provedete toto:

set -o vi

... nebo použít toto jako obsah ~/.inputrc (pro GNU readline používaný v programech, jako je bash):

set editing-mode vi

Poté můžete použít Esc zadejte příkazový režim a použijte k vrátit se do historie a j jít vpřed. Můžete také hledat pomocí / normálně hledat a ? hledat obráceně.

Pokud používáte ~/.inputrc, pak to nebude fungovat pouze v GNU bash, ale v čemkoli, co používá GNU readline jako CLISP) a případně programy jako je příkaz MySQL Shell a podobně CPAN Shell.

2
Mei

Přepnutí vpřed při použití zpětného vyhledávání (pomocí příkazu Ctrl-R):

  1. Otevřete svůj .bashrc soubor:
    Sudo gedit ~/.bashrc

  2. přidat tento řádek (písmeno "f" může být nahrazeno jiným, které systém ještě nepoužil)

    bind '"\C-f": forward-search-history' 
    
  3. Zavřete soubor a aktualizujte svůj .bashrc (nebo otevřete jiný terminál) příkazem:
    source ~/.bashrc nebo . ~/.bashrc

Teď se můžete pohybovat vpřed v historii s zkratkou: Ctrl + f

Práce na Ubuntu 18.04 LTS

2

Většinu času používám.
Vezměte však na vědomí, že oba hledají počáteční znaky.

  1. tcsh: Potom zadejte několik málo znaků příkazu Esc+p zobrazí předchozí příkaz začínající touto sekvencí kláves a znovu jej zobrazí, zobrazí další příkaz.
  2. ksh: použijte fc -e - <SPACE><first few char for your previous > to spustí poslední příkaz odpovídající této sekvenci.

Nebyl jsem schopen najít něco podobného Ctrl+R v Bash pro mé ksh a tcsh.

1
Hemant

Existuje způsob, jak používat Ctrl-R s tcsh. Přidejte do svého ~/.cshrc:

bindkey "^r" i-search-back (jedná se pouze o znak stříšky a písmeno r)

To je pro mě největší spořič času.

1
Alain

podobná odpověď na @ephemient, ale můžete vložit do svého .bashrc

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-foward'

a zadejte část fráze a poté pomocí šipky nahoru/dolů procházejte nejnovější možnosti, které se shodují. Toto je výchozí chování matlabu.

Pro většinu lidí, pokud chcete přenést vaše nastavení do nového systému, je snazší zapamatovat si zachytit pouze vaše ~/.bashrc pak to, že musíš zachytit, že ~/.inputrc

1
Matt S.

Ano, existuje, alespoň pokud používáte zsh. Stačí začít psát příkaz a pak stisknout M-p (ESCp) a najde předchozí příkazy, které odpovídají tomu, co jste zadali. Opětovným stisknutím najdete další zápas.

0
dkagedal