Injizieren Sie Zeilen, um den Verlauf zu verprügeln

9

Standardmäßig lädt bash Zeilen aus ~/.bash_historydem Verlauf. Ist es möglich, eine benutzerdefinierte Datei hinzuzufügen, die ebenfalls geladen werden soll? Ich möchte Dateien mit häufig verwendeten Befehlen einfügen und über die integrierte Suche darauf zugreifen.

rgtk
quelle
2
Normalerweise fügen Leute Aliase für häufig verwendete Befehle hinzu ...
HBruijn
Das ist großartig. Dies ist jedoch nicht der Fall. Ich verwende Aliase für Befehle, die ich ständig verwende, aber ich habe viele Befehle mit einer großen Anzahl von Argumenten, die ich je nach den Umständen ändern möchte.
Rgtk
4
Sie müssten eine Art Dateimodifikation durchführen, die ziemlich verrückt klingt und möglicherweise nicht funktioniert. Machen Sie aus Ihren langen Befehlen einfach ein Shell-Skript, das Argumente akzeptiert und ablegt /usr/local/binoder so
Wesley
Wenn Sie sie häufig verwenden, wären sie dann nicht in Ihrer Geschichte?
Funktionen deklarieren in .bashrc?
Mark K Cowan

Antworten:

13

Ich halte es einfach mit einem alias h='history|grep'in mein Bash geladenen Profil.

Mein Workflow lautet also h commandzum Beispiel: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

Wenn ich " hpssa -stop" ausführen möchte , würde ich einfach tippen!226


Dies ist nur mein Ansatz, aber vielleicht können Sie ändern, wie Sie Verlaufselemente abrufen. Ich halte es nicht für sinnvoll, Daten tatsächlich in die Verlaufsdatei einzufügen.

ewwhite
quelle
schöner Trick, diesen zu stehlen
wim
Schlagen Sie vor, dass Sie sich ansehen möchten, was Strg-R für die Suche in Ihrem Verlauf tut. Bereiten Sie sich darauf vor, Ihren Verstand zu sprengen ...
2
@CameronKerr Schauen Sie sich die Antwort direkt unter dieser an ( serverfault.com/a/695115/120438 ). Der Nachteil bei der Verwendung von Strg + R in diesem speziellen Fall ist, dass Sie die relevanten Befehle einzeln erhalten, während ewwhite Ansatz gibt eine Liste aller relevanten Befehle zurück.
Jenny D
Obwohl dies ein großartiger Trick ist, beantwortet er die Frage überhaupt nicht. Ich verstehe nicht, wie dies die am höchsten bewertete Antwort ist. Mein Anwendungsfall ist, dass ich ein Docker-Image habe, das beim Beenden immer wieder seinen Verlauf verliert. Ich dachte, es wäre schön, wenn ich eine Verlaufsdatei über die Befehlszeile andocker run ...
kumarharsh
@kumar_harsh Schwer zu gefallen.
ewwhite
7

Früher war ich sehr abhängig von Ctrl-R( reverse-search-historyReadline-Befehl), der den Verlauf rückwärts durchsucht, um zuvor eingegebene lange Befehle abzurufen, aber jetzt bevorzuge ich die Verwendung von Aliasen und Shell-Skripten / -Funktionen. Auf historyjeden Fall kann der integrierte Befehl Bash verwendet werden, um eine Liste benutzerdefinierter Befehle in Ihren aktuellen Verlauf zu laden.

history -r [filename]

Von der Bash-Manpage:

Lesen Sie den Inhalt der Verlaufsdatei und hängen Sie ihn an die aktuelle Verlaufsliste an.

Startautomatisierung

Ich habe gerade versucht, diesen Befehl automatisch zu starten, indem ich ihn als letzte Zeile in meinem hinzugefügt habe .bashrc. Die Befehle aus meiner benutzerdefinierten Verlaufsdatei waren jedoch nicht verfügbar, als ich eine neue Shell startete. Es scheint, dass der Shell-Verlauf nur aus der Standarddatei geladen wird .bash_history: nachdem die Startdateien verarbeitet wurden und kurz bevor die Eingabeaufforderung für die interaktive Shell angezeigt wird. Leider scheint es keinen einfachen Weg zu geben, dies zu automatisieren.

Anthony Geoghegan
quelle
2

Wie @AnthonyGeoghegan feststellte, wird der Verlauf geladen, nachdem die Startdateien verarbeitet wurden. Dies bietet eine andere Möglichkeit, den gewünschten Verlauf in eine Startdatei vorzuladen:

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.

Beachten Sie, dass dieser Ansatz dazu führen kann, dass im Laufe der Zeit mehrere Kopien Ihrer speziellen Befehle zu Ihrer .bash_history hinzugefügt werden. Sie können Ihre speziellen Befehle mit Kommentarzeilen umschließen, damit Sie sie leicht finden und entfernen können (z. B. sed), um die Datei .bash_history zu füllen. Etwas wie:

cp .extra_hist .bash_history
sed '/: remove from here/,/:remove to here/d' .bash_history >> .bash_history
Schnitz
quelle