(Ich spreche von der Muschel Fish, besonders von Fish's Fish .)
Für Bash / ZSH hatte ich ~/.profileeinige Exporte, Aliase und anderes Zeug.
Ich möchte keine eigene Konfiguration für Umgebungsvariablen für Fish haben, ich möchte meine wiederverwenden ~/.profile. Wie?
In den FAQ wird angegeben, dass ich diese zumindest über importieren /usr/local/share/fish/tools/import_bash_settings.pykann. Allerdings mag ich das nicht für jede Fish-Instanz.
Sie können Bash verwenden, um / etc / profile und ~ / .profile zu analysieren und dann mit dem Fisch zu beginnen.
/usr/local/bin/fishloginMit Inhalten erstellen
#!/bin/bash -l exec -l fish "$@"
Machen Sie es ausführbar
sudo chmod +x /usr/local/bin/fishlogin
Fügen Sie es zu / etc / shells hinzu
echo /usr/local/bin/fishlogin | sudo tee -a /etc/shells
Legen Sie es als Standardshell fest
sudo usermod -s /usr/local/bin/fishlogin $USER
So elegant! Sollte die akzeptierte Antwort IMO sein
yonix vor 7 Jahren
0
Nur für den Fall, dass sich jemand wundert, ist das Mac-Äquivalent von "usermod -s / usr / local / bin / fishlogin $ USER" "chsh -s / usr / local / fishlogin $ USER"
gloriphobia vor 6 Jahren
2
Wenn Sie "chsh: / usr / local / bin / fishlogin: non-standard shell" erhalten, müssen Sie es zu "/ etc / shells" hinzufügen
Ben Marten vor 6 Jahren
1
Um das Starten von Fischen direkt vollständig zu imitieren, sollte `fish" $ @ "` durch `exec -l fish" $ @ "` ersetzt werden. "exec" ersetzt den Bash-Prozess durch Fische, während "-l" bewirkt, dass "argv [0]" für Fische "-fish" ist, was bedeutet, dass es sich um eine Login-Shell handelt.
azag0 vor 6 Jahren
1
Normalerweise keine große Sache, aber dies scheint den Nachteil zu haben, dass immer dann, wenn eine Subshell implizit erstellt wird, eine unnötige Bash-Instanz zuerst gestartet wird. (Hinweis: "~ / .profile" ist nur für Anmeldungs-Shells relevant.) Trotzdem wegen des guten Kompromisses zwischen Einfachheit und Hackerin immer noch positiv bewertet. (Ich persönlich würde meine Shell-Konfigurationsskripte lieber noch ein wenig anpassen, da ich längst aufgegeben habe, komplizierte zu haben, zugunsten von benutzerdefinierten Shell-unabhängigen Methoden.)
Sz. vor 5 Jahren
0
@Sz. Nun, nein. Fisch unterstützt überhaupt keine Subshells. Und selbst wenn dies der Fall wäre, würde dies nicht durch Ausführen der Login-Shell erfolgen, und es würde dann kein Bash erscheinen.
Noé Rubinstein vor 5 Jahren
1
OK, danke für die Klarstellung!
Sz. vor 5 Jahren
0
14
Albert
Meine aktuelle Lösung (sehen Sie hier für eine vielleicht aktuellere Version):
egrep "^export " ~/.profile | while read e set var (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)\$/\1/") set value (echo $e | sed -E "s/^export ([A-Z_]+)=(.*)\$/\2/") # remove surrounding quotes if existing set value (echo $value | sed -E "s/^\"(.*)\"\$/\1/") if test $var = "PATH" # replace ":" by spaces. this is how PATH looks for Fish set value (echo $value | sed -E "s/:/ /g") # use eval because we need to expand the value eval set -xg $var $value continue end # evaluate variables. we can use eval because we most likely just used "$var" set value (eval echo $value) set -xg $var $value end
Kannst du erklären, was das bedeutet?
max pleaner vor 7 Jahren
3
@maxpleaner AFAICT Durchsucht .profile nach Exportanweisungen und führt sie als Fischmengen aus. Es ist irgendwie hackig, aber klug.
Jared Smith vor 5 Jahren
0
7
jgillich
Für eine viel sauberere Lösung können Sie das fremde Env- Plugin verwenden:
fenv source ~/.profile
Dies sollte die akzeptierte Lösung sein. Sie könnten etwas näher ausführen (omf installieren)
Jules Randolph vor 6 Jahren
3
3
Eswar Rajesh Pinapala
Ich habe versucht, .profile über das Startup von Fisch zu beschaffen, und es funktionierte für mich wie ein Zauber.
You can't. fish's syntax is too different from Bourne shell (/bin/sh) syntax. This is the same reason you can't use .profile with other non-Bourne-derived shells, such as csh and tcsh.
Ich möchte `.profile` nicht vollständig ausführen. Ich möchte nur alle `Exports von dort bekommen. Ein einfacher Weg wäre "egrep" ^ export "", was für mich schon gut genug wäre. Eine andere, richtigere Lösung wäre [this] (http://superuser.com/questions/446929/run-any-shell-script-from-fish-and-import-all-exported-env-variables). Ich könnte auch dieses `import_bash_settings.py`-Skript ausführen, das wahrscheinlich etwas Ähnliches macht. Es gibt also offensichtlich viele Möglichkeiten, dies zu tun. Mit meiner Frage fragte ich mich, wie andere das gelöst haben.
Albert vor 11 Jahren
0
Sie können Fish von Bash aus starten. In diesem Fall erbt Fish alle Umgebungsvariablen ( export FOO=bar) von Bash. An diesem Punkt hat Bash bereits Ihr .profile(oder ähnliches) gelesen .
bash-3.2$ export TEST="test" bash-3.2$ fish cmey@MBP ~> echo $TEST test
0
rsalmei
Warum fügst du nicht einfach das config.fishhier ein:
bass source ~/.profile
bass ist ein Plugin zum Ausführen von Bash-Befehlen in fish.