Waar plaats je $PATH variabele beweringen in zsh?

Ik ben dol op zsh, maar ik weet niet zeker waar ik mijn $PATHen 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 zshgebruik, maar waar moet ik precies plaatsen mijn rvm, python, nodeenz. toevoegingen aan mijn $PATH?

Is er een specifiek bestand dat ik zou moeten gebruiken (bijv. .zshenvdat 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, ~/.zshenven ~/.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/profilemogelijkafkomstig van zsh. Echter, dit gebeurt alleen als zshwordt “aangeroepen als shof 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/profilealtijd wordt gelezendoor zshbij 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 $PATHingesteld in /etc/profilemijn 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 $PATHexporteren vanuit ~/.zshrc, maar het is de moeite waard om de zshallman-pagina, met name de sectie “STARTUP/SHUTDOWN FILES” – ~/.zshrcwordt gelezen voor interactieveshells, die al dan niet aan uw behoeften voldoen – als u de $PATHwilt voor elke zshshell die door u wordt aangeroepen (beide interactiveen niet, zowel loginals niet, etc), dan is ~/.zshenveen 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 ~/.zshenvniet bestaat – als je het nodig hebt, maak het dan en het zal worden gelezen.

.bashrcen .bash_profileworden nietgelezen door zsh, tenzij je ze expliciet uit ~/.zshrcof vergelijkbaar; de syntaxis tussen bashen zshis nietaltijd compatibel. Zowel .bashrcals .bash_profilezijn 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

Other episodes