risposta-alla-domanda-sullo-sviluppo-web-bd.com

Esiste un modo per eseguire comandi dalla cronologia?

Per esempio:

[[email protected] ~]# history | grep free
  594  free -m
  634  free -m | xargs | awk '{print "free/total memory" $17 " / " $ 8}'
  635  free -m
  636  free -m | xargs | awk '{print "free/total memory" $9 " / " $ 10}'
  736  df -h | xargs |  awk '{print "free/total disk: " $11 " / " $9}'
  740  df -h | xargs |  awk '{print "free/total disk: " $11 " / " $8}'
  741  free -m | xargs | awk '{print "free/total memory: " $17 " / " $8 " MB"}'

Mi chiedo solo se esiste un modo per eseguire il comando 636 senza digitarlo di nuovo, basta digitare qualcosa più il numero, come la cronologia 636 o qualcosa del genere.

111
The One

In bash, solo !636 andrà bene.

193
user164825

Sì, si chiama "espansione della storia". Vedere

LESS='+/^HISTORY EXPANSION' man bash

per tutti i dettagli.

L'uso di un punto esclamativo seguito da un numero è probabilmente l'uso più semplice:

!636

Tuttavia, puoi anche eseguire direttamente l'ultimo comando eseguito senza conoscerne il numero storico:

!!

Oppure puoi eseguire due comandi indietro:

!-2

Il modulo che utilizzo più spesso, tuttavia, è ripetere l'ultimo argomento dell'ultimo comando:

echo this text goes into a file > /tmp/afile.txt
cat !$

O, diciamo, sto ispezionando un file. Utilizzando il completamento della scheda, potrei fare quanto segue:

ls -l /really/long/path/to/some/file
less !$

Ancora una volta leggi la pagina man per maggiori dettagli:

LESS='+/^HISTORY EXPANSION' man bash
80
Wildcard

Bello, se non vuoi fare la prima cronologia, prendi nota del numero, ecc:

in bash (e forse altri):

ctrl-r something 

(ctrl-r = "ricerca inversa in modo interattivo") (something = parte di un comando precedente)

Questo ti mostrerà l'ultima riga della cronologia contenente something. Per ottenere quello precedente, fai di nuovo ctrl-r (da solo), ogni volta che ottiene una riga precedente.

ex:

ctrl-r  10

per mostrare l'ultima riga della cronologia contenente '10' (ad esempio la riga con $10, nel tuo esempio) e ctrl-r di nuovo fino a quando non recuperi la riga della cronologia che stavi cercando

Quando viene visualizzata la riga desiderata, basta Enter per eseguirla (oppure puoi anche modificarla, usando arrow keys, backspace e ctrl-a per andare all'inizio della riga, ctrl-e per arrivare alla fine, ctrl-k: per "uccidere" dal cursore alla fine della riga (= elimina + lo salva in un buffer), ctrl-y: per ripristinare, dal buffer, un bit precedentemente ucciso, ecc.)

Se vuoi cercare in avanti (ctrl-s), devi prima disabilitare XON : vedi https://stackoverflow.com/ a/791800/18415 :

"solo per disabilitare XON/XOFF eseguendo

stty -ixon

"(e quindi sarai in grado di usare ctrl-s, senza che si blocchi il terminale)

14
Olivier Dulac

Puoi usare Shell incorporato fc:

fc -s 636
8
Steven Penny

Esiste HSTR - hh comando per bash e zsh selezione comandi interattiva, meglio della ricerca inversa Ctrl-R:

hh interactive history command example

è interattivo, quindi è possibile cercare e modificare il comando prima di eseguirlo.

Su Ubuntu, puoi installare hh con il seguente one-liner:

Sudo add-apt-repository ppa:ultradvorka/ppa && Sudo apt-get update && Sudo apt-get install hh && hh --show-configuration >> ~/.bashrc

o passo dopo passo:

Sudo add-apt-repository ppa:ultradvorka/ppa
Sudo apt-get update
Sudo apt-get install hh

Installa hh su Fedora, RHEL o CentOS:

Sudo dnf|yum install hstr -y

Su macOS con homebrew:

brew install hh

... quindi configuralo con:

hh --show-configuration >> ~/.bashrc

Ciò sostituirà il comportamento predefinito Ctrl-R.

Correre hh --show-configuration per determinare cosa verrà aggiunto al tuo profilo Bash.

Altre opzioni di configurazione disponibili sulla homepage del progetto su Github: https://github.com/dvorka/hstr

3
modlin