Nur eine Frage, um meine bash
Fähigkeiten zu verbessern . Ich mache immer das:
$ history | grep some_long_command
...
...
123 some_long_command1.........
124 some_long_command2.........
...
Ich kann dann den Befehl ausführen, den ich gefunden habe, indem ich Folgendes getan habe:
!123
Ich möchte dies jedoch häufig tun:
some_long_command1foobar
Dh den Befehl ändern, bevor ich ihn ausführe. Können Sie stattdessen bash verwenden, um diesen Befehl auszuführen:
#some_long_command1
so wird es kommentiert.
Dann muss ich den Befehl nicht mit der Maus markieren, bearbeiten und dann ausführen (ich kann einfach die Tastatur verwenden - schneller).
Ich nehme an, ich könnte ein Skript schreiben, um das zu tun, aber irgendwo sind möglicherweise bereits Funktionen eingebaut ...?
linux
bash
command-line
Ale
quelle
quelle
bind Space:magic-space
Ihr Bash-Profil ein. Dann drückenSpace
expandiert!123
insome_long_command1
.Antworten:
Ich würde vorschlagen, anstatt den Befehl history zu verwenden, diesen Befehl zu verwenden
ctrl+r
und zu schreiben. Wenn Sie eine Pfeiltaste drücken, um sie zu ändern, wird die Erkennung der automatischen Vervollständigung unterbrochen und Sie können sie vor dem Ausführen bearbeiten.UPDATE: Wenn Sie die verschiedenen Befehle durchlaufen möchten, die die gerade eingegebene Zeichenfolge enthalten, drücken Sie weiter
ctrl+r
quelle
set -o vi
) verwenden, können Sie auch/
den Verlauf durchsuchen und bearbeiten.ctr+r
, beginnen Sie mit der Eingabe. Wenn Sie dann alle Befehle finden möchten, die dies enthalten, drücken Sie einfach weiterctrl+r
. Mit anderen Worten, was Sie mit Auf / Ab machen wollen, wird (in Round-Robin-Manier) mitctrl+r
Tatsächlich können Sie einfach
:p
an den Befehl anhängen , um ihn zu drucken, ohne ihn tatsächlich auszuführen. Zum Beispiel:Wird
ls -la
als vorheriger Befehl ausgedruckt, ohne ihn auszuführen , und Sie können einfach ↑(nach oben) drücken , um ihn zu finden und zu bearbeiten.Sie können auch tun
um den 123. Befehl als Ihren vorherigen Befehl auszudrucken.
quelle
!mycmd:p
. Wenn Sie vi-Befehle in Bash aktiviert haben, ist Pursells Antwort genauso gut oder besser. Strg-r ist, wie von Miquel erwähnt, der nächstbeste.Sie können auch versuchen
fc
, den Befehl im Verlauf zu bearbeiten.WIKI sagt:
Abgesehen von der umgekehrten inkrementellen Suche ( Ctrl+ R) gibt es noch einige weitere Bash- Verknüpfungen:
Von
man bash
:quelle
Führt den Befehl 123 aus und ersetzt die Zeichenfolge 'alt' durch die Zeichenfolge 'neu'.
quelle
Sie können in den Bearbeitungsmodus wechseln, indem Sie M- ^ drücken (Option-Shift-6 auf einem Mac).
Geben Sie Folgendes ein:
Und Sie bearbeiten den Befehl Nr. 123. Es ist so, als würde man Strg-R verwenden, aber mit der Ausrufezeichen-Syntax beginnen.
quelle
M-^
man sich wieder an etwas Fingerfreundlicheres binden?Anstatt den
history
Befehl zu verwenden, binden Siehistory-search-backward
/history-search-forward
an Tastenkombinationen, an die Sie sich leicht erinnern können (ich bevorzuge PgUp / PgDown). Fügen Sie dazu Folgendes in Ihre.inputrc
Datei ein:"<key code>": history-search-backward "<key code>": history-search-forward
Um
<key code>
, geben SieCtrl-V <key>
in der Schale, und ersetzen Sie den Start^[
mit\e
in welcher ausgegeben wurde.Nachdem dies eingerichtet ist, können Sie einfach
some
PgUp eingeben und drücken, um zu erhaltensome_long_command
. Wenn Siesome_long_command with_some_arg
einen ähnlichen Befehlsome_long_command with_some_other_arg
später im Verlauf benötigen , können Sie ihn durchlaufen, bis Sie ihn erreichen, indem Siesome
PgUp eingeben und dann wiederholt drücken, oder Sie könnensome
PgUp eingeben, den Cursor an die Stelle bewegen, an der sich die beiden Befehle zu unterscheiden beginnen. Geben Sie ein paar Zeichen ein und drücken Sie erneut PgUp. Diese Fähigkeit, schnell durch ähnliche Befehle zu blättern / zu unterscheiden, macht es meiner Meinung nach zu einem viel komfortableren Werkzeug alsCtrl-R
.quelle
Sie können auch setzen
shopt -s histverify
Dies führt dazu
.bash_profile
, dass eine Verlaufserweiterung in Ihrer Befehlszeile angezeigt wird, ohne sie auszuführen, sodass Sie sie vorher bearbeiten können.quelle
Sie können versuchen, "Box vorschlagen" -ähnlichen Verlauf https://github.com/dvorka/hstr zu versuchen - es liest den Bash-Verlauf und ermöglicht eine schnelle Navigation.
Um den letzten Befehl zu erhalten, geben Sie einfach hh ein, navigieren Sie zum Befehl und verwenden Sie den Rechtspfeil, um ihn in die Befehlszeile zu bringen (wo Sie ihn bearbeiten und / oder einen Kommentar hinzufügen können).
quelle
^ p, um den zuletzt eingegebenen Befehl in Unix / Solaris abzurufen
quelle
Stellen
alias r = 'fc -s'
In Ihrem
.bashrc
(Home-Verzeichnis) können Sie dann einfach eingebenAn der Eingabeaufforderung führen Sie eine Kopie des letzten
<whatever>
Befehls (dieselben Parameter) aus, der sich in Ihrem Verlauf befindet. Drücken Sie einfach den Pfeil nach oben, um zu sehen, was Sie ausgeführt haben, wenn Sie das Bedürfnis haben.quelle