Gibt es ein Dienstprogramm, das das Speichern und Wiederherstellen von Bash-Sitzungen optimiert? Ich würde gerne EG machen können
$ KUNG=pao
$ foo commit # saves the current environment
# as an anonymous changeset from the previous savepoint
$ SCHNICKENS="What's up, doc?"
$ SCHNICKENS="$(echo Schmoove)"
$ unset KUNG
$ foo diff HEAD # outputs a $(set) of commands
# which comprise the current changeset
unset KUNG;
SCHNICKENS="Schmoove"
$ foo branch edit-su-question # creates a new branch with that name
$ foo merge master # updates the current environment
# with any changes made to ~/.bashrc
# since it was branched or last merged
$ function fierce_fist_of_foo {
cut -f 2 | xargs -I {} bash foo {} '>>' ffof.out;
}
$ foo checkout master # switches current branch
# to the one checked out by ~/.bashrc
$ foo commit -m "learned the fierce_fist_of_foo technique"
# new interactive `bash` invocations now load that function
Aufgrund der Ähnlichkeit mit dem git
Befehlssatz bin ich versucht, ein obszönes Wort oder alternativ einen Smashing Pumpkins-Albumtitel als Befehlsnamen in diesem Beispiel zu verwenden. Aber gut, ole ist foo
es.
Ich begründe mein Vertrauen in die Funktionsfähigkeit dieses Konzepts weitgehend mit der Annahme, dass das Ausführen set
einer Bash-Shell ein aufrufbares Skript ergibt, mit dem diese Umgebung wiederhergestellt wird. Ich bin mir nicht sicher, ob das völlig stimmt.
Wie auch immer , gibt es da draußen etwas, das so funktioniert? Zusätzliche Punkte, wenn es tatsächlich git
als Teil seiner Implementierung verwendet. Ich akzeptiere diese Antwort. Da bist du nur für die Punkte drin und alles.
env
Sie jedoch keine Funktionsdefinitionen oder andere Dinge, bei denen ich mir nicht sicher bin. Auch die Kasse müssteunset
für-
Zeilen in der Diff s tun . Ich stellte mir vor, die Ausgabe vonset
Zuweisungenunset
,function
Anweisungen usw. zu analysieren und eine Reihe von Anweisungen zu erstellen, die erforderlich wären, um diese Änderung aufzurufen. Andere Dinge wieshopt
sollten auch enthalten sein.history
in vim übergebe und die Funktionsdefinitionen aus dem Verlauf in das Skript kopiere. Es ist viel sinnvoller, dies mit dem Prototyping der Shell-Umgebung zu tun.git
Als Arbeitsmodell oder Implementierungsbasis ist dies aus zwei Gründen ein wenig eingeschränkt: 1) Die Zweiggruppe ist eine flache Liste, was bedeutet, dass Sie nicht die bequeme Möglichkeit haben, viele von ihnen [neu] zu organisieren. 2) Es gibt keine Möglichkeit, einen "geschichteten Zweig" zu erstellen, der mehr als einen Zweig dynamisch zusammenführt. In Bezug auf die Programmierung handelt es sich bei Zweigen um statische Typen und bei Commits um Kompilierungen.