it-swarm.com.de

Gibt es eine Möglichkeit, Befehle aus dem Verlauf auszuführen?

Zum Beispiel:

[[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"}'

Ich frage mich nur, ob es eine Möglichkeit gibt, den 636-Befehl auszuführen, ohne ihn erneut einzugeben. Geben Sie einfach etwas plus die Zahl ein, z. B. den Verlauf 636 oder etwas anderes.

111
The One

In Bash nur !636 wird in Ordnung sein.

193
user164825

Ja, es heißt "Geschichtserweiterung". Sehen

LESS='+/^HISTORY EXPANSION' man bash

für alle Details.

Die Verwendung eines Ausrufezeichens gefolgt von einer Zahl ist wohl die einfachste Verwendung:

!636

Sie können den zuletzt ausgeführten Befehl jedoch auch direkt ausführen, ohne die Verlaufsnummer zu kennen:

!!

Oder Sie können zwei Befehle zurückführen:

!-2

Die Form, die ich jedoch am häufigsten verwende, besteht darin, das letzte Argument des letzten Befehls zu wiederholen:

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

Oder nehmen wir an, ich inspiziere eine Datei. Mit der Tab-Vervollständigung kann ich Folgendes tun:

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

Nochmals lesen Sie die Manpage für weitere Details:

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

Eine schöne, wenn Sie nicht die erste Geschichte wollen, notieren Sie sich die Nummer usw.:

in bash (und vielleicht auch anderen):

ctrl-r something 

(ctrl-r = "Interaktive Suche umkehren") (something = Teil eines vorherigen Befehls)

Dies zeigt Ihnen die neueste Verlaufszeile mit something. Um die vorherige zu erhalten, drücken Sie jedes Mal, wenn eine vorherige Zeile angezeigt wird, erneut Strg-R (allein).

ex:

ctrl-r  10

um die letzte Verlaufszeile mit '10' anzuzeigen (zum Beispiel die Zeile mit $10 in Ihrem Beispiel) und ctrl-r erneut, bis Sie die gesuchte Verlaufszeile abrufen

Wenn die gewünschte Zeile angezeigt wird, müssen Sie nur Enter ausführen (oder Sie können sie auch mit arrow keys, backspace und ctrl-a Bearbeiten zum Zeilenanfang ctrl-e, um zum Ende zu gelangen, ctrl-k: vom Cursor zum Zeilenende "töten" (= löscht + speichert es in einem Puffer), ctrl-y: Zum Wiederherstellen eines zuvor getöteten Bits aus dem Puffer usw.)

Wenn Sie vorwärts suchen möchten (Strg-s), , müssen Sie zuerst XON deaktivieren : siehe https://stackoverflow.com/ a/791800/18415 :

"Nur um XON/XOFF durch Ausführen zu deaktivieren

stty -ixon

"(und dann können Sie Strg-s verwenden, ohne dass das Terminal eingefroren wird)

14
Olivier Dulac

Sie können die integrierte Shell verwenden fc:

fc -s 636
8
Steven Penny

Es gibt HSTR - hh Befehl für bash und zsh interaktive Befehlsauswahl, besser als Strg-R Rückwärtssuche:

(hh interactive history command example

es ist interaktiv, sodass Sie den Befehl suchen und bearbeiten können, bevor Sie ihn ausführen.

Unter Ubuntu können Sie hh mit dem folgenden Einzeiler installieren:

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

oder Schritt für Schritt:

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

Installieren Sie hh unter Fedora, RHEL oder CentOS:

Sudo dnf|yum install hstr -y

Unter macOS mit homebrew:

brew install hh

... dann konfigurieren Sie es mit:

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

Dies ersetzt das Standardverhalten von Strg-R.

Lauf hh --show-configuration um zu bestimmen, was an Ihr Bash-Profil angehängt wird.

Weitere Konfigurationsoptionen finden Sie auf der Projekthomepage unter Github: https://github.com/dvorka/hstr

3
modlin