Czy istnieje narzędzie usprawniające przechowywanie i przywracanie sesji bash? Chciałbym móc wykonać EG
$ 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
Biorąc pod uwagę podobieństwo do git
zestawu poleceń, kusi mnie, aby użyć nieprzyzwoitego słowa lub alternatywnie tytułu albumu Smashing Pumpkins jako nazwy polecenia w tym przykładzie. Ale foo
to jest dobre ole .
Swoją wiarę w wykonalność tej koncepcji set
opieram w dużej mierze na założeniu, że uruchomienie z powłoki bash da ci wywoływalny skrypt, który przywróci to środowisko. Nie jestem pewien, czy to całkowicie prawda.
W każdym razie , czy istnieje coś takiego, co działa w ten sposób? Dodatkowe punkty, jeśli faktycznie wykorzystuje git
jako część jego realizacji. Przyjmuję tę odpowiedź. Ponieważ jesteś w nim tylko za punkty i wszystko.
env
, nie otrzymasz żadnych definicji funkcji ani innych rzeczy, których nie jestem pewien. Również kasa musiałaby wykonaćunset
s dla-
linii w diff. Wyobraziłem sobie analizowanie wynikówset
i budowanie zestawu przydziałówunset
,function
instrukcji, instrukcji itp., Które byłyby konieczne do wywołania tej zmiany.shopt
Należy również uwzględnić inne rzeczy, takie jak .history
do vima i kopiując definicje funkcji z historii do skryptu. Bardziej sensowne jest robienie tego przy prototypowaniu środowiska powłoki.git
jest właściwie nieco ograniczony jako działający model lub baza implementacyjna, z dwóch powodów: 1) zestaw rozgałęzień jest płaską listą, co oznacza, że nie masz wygodnego sposobu [re] uporządkowania wielu z nich; 2) nie ma możliwości utworzenia „gałęzi warstwowej”, która dynamicznie łączy więcej niż jedną gałąź. Z punktu widzenia programowania gałęzie są typami statycznymi, a zatwierdzenia są kompilacjami.