Führen Sie den Befehl fc aus dem Verlauf erneut aus

7

Manchmal verwende ich das fceingebaute bash(3.2, wenn das wichtig ist), um Befehle aus dem Verlauf abzurufen . Dies bietet auch die Möglichkeit, vor der Ausführung zu bearbeiten.

Zum Beispiel durch Eingabe

fc 23 27

Ich kann Befehl 23 bis 27 erneut ausführen. Jetzt möchte ich diesen speziellen fc 23 27Befehl erneut ausführen . Wie soll ich das machen Es sieht so aus, als ob die ausgeführte fcDatei nicht im Befehlsverlauf gespeichert ist, obwohl die neu ausgeführten Zeilen dies sind.

Bernhard
quelle
1
Ich habe diesen Befehl zum ersten Mal gehört fc. Vielen Dank für die Aufklärung :)
SHW

Antworten:

5

Fügen Sie dies Ihrer .bashrc hinzu:

fc() {
    command fc "$@"
    history -s fc $@
}
Baronsed
quelle
Schön, das funktioniert. Wäre ordentlich, wenn es eine eingebaute Lösung anstelle einer Funktion gäbe. Ich werde Ihnen das Kopfgeld gewähren, falls Sie keine besseren Antworten erhalten.
Bernhard
0

Versuchen Sie, Ihre fc 23 27Geschichte hinzuzufügen , und rufen Sie sie später erneut auf:

knoedel@section60:~> bash --version
GNU bash, version 4.2.42(1)-release (x86_64-suse-linux-gnu)

knoedel@section60:~> history -s "fc 4074 4076"
knoedel@section60:~> history | tail -n 2
 4090  15/12/2013 11:31:23 > fc 4074 4076
 4091  15/12/2013 11:31:25 > history | tail
knoedel@section60:~> fc -s 4090

fc -s 4090läuft also eigentlich fc 4074 4076aber nur in dieser sitzung. Wenn Sie sich abmelden und erneut anmelden, ändern sich die Verlaufsbefehlsnummern. Zumindest wie ich es getestet habe. (wahrscheinlich wenn BASH_HISTSIZE erreicht ist)

Um zu vermeiden, dass falsche Befehle ausgeführt werden, empfehle ich, Ihre Befehle aus dem Verlauf in einem Shell-Skript mit zu speichern fc -n -l id id > ~/bin/something.sh

StefanKaerst
quelle
Danke für deine Antwort. Nur verstehe ich nicht, wie es sich von dem von @Baronsed unterscheidet?
Bernhard
Sie haben nach einer Lösung mit integrierten Tools gefragt - das ist mein Vorschlag. Ich habe nicht wirklich verstanden, warum Sie überhaupt nach einer solchen Lösung gefragt haben. Baronsed hat Ihre Frage bereits beantwortet und Sie können dieselbe Lösung ohne dieses Bash-Skript verwenden. Ich habe nur einen kleinen Text hinzugefügt, um sie zu erklären, ok?
StefanKaerst
Ich hatte auf eine Lösung gehofft wie: fc --keepinhistory 22 34oder export HISTNOTIGNORE=fc. Aber anscheinend existiert das nicht.
Bernhard
Wenn Sie alte Befehle verwenden möchten, um den Bash-Verlauf jemals zu deaktivieren. stackoverflow.com/questions/18663078/disable-history-in-linux andernfalls werden neue Befehle zum Verlauf hinzugefügt (außer fc, das kein neuer Befehl ist, aber alte wieder ausführt - das erneute Ausführen des letzten Befehls ist dasselbe. Es wird nicht ausgeführt zur Geschichte hinzugefügt) hth
StefanKaerst
Ich bin nicht sicher, ob ich verstehe, was Sie sagen wollen, aber ich möchte die Geschichte nicht deaktivieren. Ich möchte nur, dass der von mir eingegebene fcBefehl zum Verlauf hinzugefügt wird.
Bernhard