Ik ben dol op zsh
, maar ik weet niet zeker waar ik mijn $PATH
en andere variabele beweringen moet plaatsen? Ik vind dat ze verspreid zijn tussen de bestanden .zshrc
.zprofile
.bashrc
.bash_profile
, en soms verdubbeld.
Ik realiseer me dat iets in de bash
-bestanden niet veel zin heeft, aangezien ik zsh
gebruik, maar waar moet ik precies plaatsen mijn rvm
, python
, node
enz. toevoegingen aan mijn $PATH
?
Is er een specifiek bestand dat ik zou moeten gebruiken (bijv. .zshenv
dat momenteel nietbestaat in mijn installatie), een van de bestanden die ik momenteel gebruik, of maakt het nog uit?
Antwoord 1, autoriteit 100%
tl;dr-versie: gebruik ~/.zshrc
En lees de man-paginaom de verschillen te begrijpen tussen:
~/.zshrc
,~/.zshenv
en~/.zprofile
.
Over mijn opmerking
In mijn commentaar bij het antwoord dat kev gaf, zei ik:
Dit lijkt onjuist te zijn – /etc/profile wordt niet vermeld in de zsh-documentatie die ik kan vinden.
Dit blijkt gedeeltelijk onjuist te zijn: /etc/profile
mogelijkafkomstig van zsh
. Echter, dit gebeurt alleen als zsh
wordt “aangeroepen als sh
of ksh
“; in deze compatibiliteitsmodi:
De gebruikelijke zsh opstart-/afsluitscripts worden niet uitgevoerd. Login shells source /etc/profile gevolgd door $HOME/.profile. Als de ENV-omgevingsvariabele is ingesteld bij aanroepen, wordt $ENV opgehaald na de profielscripts. De waarde van ENV wordt onderworpen aan parameteruitbreiding, opdrachtvervanging en rekenkundige uitbreiding voordat deze wordt geïnterpreteerd als een padnaam. [man zshall, “Compatibiliteit”].
De ArchWiki ZSH-linkzegt:
Bij inloggen haalt Zsh de volgende bestanden in deze volgorde op:
/etc/profile
Dit bestand is afkomstig van alle Bourne-compatibele shells bij het inloggen
Dit houdt in dat /etc/profile
altijd wordt gelezendoor zsh
bij het inloggen – ik heb geen ervaring met de Arch Linux projecten; de wiki kan correct zijn voor die distributie, maar het is over het algemeen nietcorrect. De informatie isonjuist vergeleken met de zsh-handleidingen en lijkt niet van toepassing te zijn op zsh op OS X (paden in $PATH
ingesteld in /etc/profile
mijn zsh-sessies niet halen).
Om de vraag te beantwoorden:
Waar moet ik mijn toevoegingen van rvm, python, node enz. precies aan mijn $PATH plaatsen?
Over het algemeen zou ik mijn $PATH
exporteren vanuit ~/.zshrc
, maar het is de moeite waard om de zshallman-pagina, met name de sectie “STARTUP/SHUTDOWN FILES” – ~/.zshrc
wordt gelezen voor interactieveshells, die al dan niet aan uw behoeften voldoen – als u de $PATH
wilt voor elke zsh
shell die door u wordt aangeroepen (beide interactive
en niet, zowel login
als niet, etc), dan is ~/.zshenv
een betere optie.
Is er een specifiek bestand dat ik zou moeten gebruiken (d.w.z. .zshenv dat momenteel niet bestaat in mijn installatie), een van de bestanden die ik momenteel gebruik, of maakt het zelfs uit?
Er worden een heleboel bestanden gelezen bij het opstarten (controleer de gelinkte man
-pagina’s), en daar is een reden voor – elk bestand heeft zijn specifieke plaats (instellingen voor elke gebruiker, instellingen voor gebruikersspecifieke , instellingen voor login-shells, instellingen voor elke shell, enz.).
Maak je geen zorgen dat ~/.zshenv
niet bestaat – als je het nodig hebt, maak het dan en het zal worden gelezen.
.bashrc
en .bash_profile
worden nietgelezen door zsh
, tenzij je ze expliciet uit ~/.zshrc
of vergelijkbaar; de syntaxis tussen bash
en zsh
is nietaltijd compatibel. Zowel .bashrc
als .bash_profile
zijn ontworpen voor bash
-instellingen, niet voor zsh
-instellingen.
Antwoord 2, autoriteit 20%
Hier zijn de documenten van de zsh man-pagina’s onder de sectie STARTUP/SHUTDOWN FILES.
Commands are first read from /etc/zshenv this cannot be overridden.
Subsequent behaviour is modified by the RCS and GLOBAL_RCS options; the
former affects all startup files, while the second only affects global
startup files (those shown here with an path starting with a /). If
one of the options is unset at any point, any subsequent startup
file(s) of the corresponding type will not be read. It is also possi-
ble for a file in $ZDOTDIR to re-enable GLOBAL_RCS. Both RCS and
GLOBAL_RCS are set by default.
Commands are then read from $ZDOTDIR/.zshenv. If the shell is a login
shell, commands are read from /etc/zprofile and then $ZDOTDIR/.zpro-
file. Then, if the shell is interactive, commands are read from
/etc/zshrc and then $ZDOTDIR/.zshrc. Finally, if the shell is a login
shell, /etc/zlogin and $ZDOTDIR/.zlogin are read.
Hieruit kunnen we zien dat de orderbestanden worden gelezen:
/etc/zshenv # Read for every shell
~/.zshenv # Read for every shell except ones started with -f
/etc/zprofile # Global config for login shells, read before zshrc
~/.zprofile # User config for login shells
/etc/zshrc # Global config for interactive shells
~/.zshrc # User config for interactive shells
/etc/zlogin # Global config for login shells, read after zshrc
~/.zlogin # User config for login shells
~/.zlogout # User config for login shells, read upon logout
/etc/zlogout # Global config for login shells, read after user logout file
Je kunt meer informatie krijgen hier.
Antwoord 3, autoriteit 10%
Ik had een soortgelijk probleem (in bash terminal opdracht werkte correct maar zsh toonde opdracht niet gevonden fout)
Oplossing:
plak gewoon wat je eerder in ~/.bashrc plakte om:
~/.zshrc