Während ich google, wie ich meine Shell-Eingabeaufforderung über die PS1-Variable anpasse, werden Tabellen mit Sonderzeichen angezeigt, die verwendet werden können. Im Speziellen:
\! the history number of this command
\# the command number of this command
"Verlaufsnummer" scheint häufiger verwendet zu werden, und ich weiß, wie man Befehle verwendet !523
, um Befehle aus dem Verlauf zu wiederholen. Aber ich kann nicht herausfinden, ob "Befehlsnummer" ähnliche Funktionen hat. Ich habe versucht, \#
meine PS1-Variable einzugeben, und sie scheint die Anzahl der in einer bestimmten Sitzung eingegebenen Befehle auszugeben (im Gegensatz dazu \!
, die nach dem Abmelden / Beenden bestehen bleiben).
Weiß jemand, wie man "Befehlsnummer" auf bequeme oder sinnvolle Weise verwendet?
bash
command-line
command-history
Lagrange
quelle
quelle
Antworten:
Die Befehlsnummer von Bash dient nur zur Anzeige.
Zunächst einige Hintergrundinformationen von
bashref
:Wenn
parse.y
wir durch die Quelle tauchen, sehen wir, dass'\#'
die globale statische Variable aufgelöst wirdcurrent_command_number
:Dies hat nur eine andere Verwendung: In
eval.c
wird es beim Ausführen eines Befehls erhöht:Alles, was aufbewahrt wird, ist eine Nummer, nicht der eigentliche Befehl oder sogar die entsprechende Verlaufsnummer. Bei der Ausführung jedes Befehls vergisst bash also, welcher Befehl mit welcher Befehlsnummer verknüpft ist, wodurch die Befehlsnummer für andere Zwecke als die Anzeige- und Bildlaufreferenz unbrauchbar wird.
quelle
Soweit ich das beurteilen kann (und dies scheint durch Ihre Forschung bestätigt zu sein), gibt es keine Möglichkeit, interaktiv auf diese magische Zahl zu verweisen, oder nicht durch
fc
oder!n
Verknüpfungen. Diese scheinen sich sicherlich nur auf die absolute Position in der Verlaufsliste zu beziehen, nicht auf die relative Position seit dem Start dieser spezifischen Shell (worauf Sie sich\#
beziehen, wie Sie richtig betont haben).Die einzige Möglichkeit, dies hier schöner zu machen, besteht darin, Folgendes festzulegen:
Dieser Weg:
1000
, wodurch es einfacher wird, festzustellen, wo ich mich in einer Sitzung befindeGrundsätzlich wurde meine geänderte Eingabeaufforderung (
PS1="\\!$ "
) von:zu:
... was es beim Start etwas sauberer macht. Aber das ist wahrscheinlich nicht die Antwort, nach der Sie gesucht haben. :) :)
(Übrigens habe ich auch bei zsh nach einer Lösung gesucht, und es scheint, dass es einfach nicht das Äquivalent von hat
\#
, also hilft das auch überhaupt nicht.)quelle