Di mana menempatkan pernyataan variabel $ PATH di zsh?

111

Saya suka zsh, tetapi saya tidak yakin di mana harus menempatkan $PATHpernyataan variabel saya dan variabel lainnya? Saya menemukan bahwa mereka tersebar di antara file .zshrc .zprofile .bashrc .bash_profile, dan terkadang berlipat ganda.

Saya menyadari bahwa memiliki sesuatu di dalam bashfile tidak masuk akal mengingat saya menggunakan zsh, tapi di mana tepatnya yang harus saya menempatkan saya rvm, python, nodedll penambahan saya $PATH?

Apakah ada file tertentu yang harus saya gunakan (yaitu .zshenvyang saat ini tidak ada dalam instalasi saya), salah satu file yang sedang saya gunakan, atau apakah itu penting?

stefmikhail
sumber

Jawaban:

148

tl; versi dr: gunakan ~/.zshrc

Dan baca halaman manual untuk memahami perbedaan antara:

~/.zshrc, ~/.zshenvdan ~/.zprofile.


Mengenai komentar saya

Dalam komentar saya yang terlampir pada jawaban yang diberikan kev , saya berkata:

Ini sepertinya tidak benar - / etc / profile tidak terdaftar dalam dokumentasi zsh yang dapat saya temukan.

Ini ternyata sebagian tidak benar: /etc/profile mungkin bersumber oleh zsh. Namun , ini hanya terjadi jika zsh"dipanggil sebagai shatau ksh"; dalam mode kompatibilitas ini:

Skrip startup / shutdown zsh biasa tidak dieksekusi. Login sumber shell / etc / profile diikuti dengan $ HOME / .profile. Jika variabel lingkungan ENV disetel pada pemanggilan, $ ENV bersumber setelah skrip profil. Nilai ENV tunduk pada perluasan parameter, substitusi perintah, dan perluasan aritmatika sebelum diinterpretasikan sebagai nama jalur. [ man zshall, "Kompatibilitas" ].

The Link ArchWiki zsh mengatakan:

Saat login, Zsh mengambil file berikut dalam urutan ini:
/ etc / profile
File ini bersumber dari semua shell yang kompatibel dengan Bourne saat login

Ini implys yang /etc/profileadalah selalu membaca dengan zshsaat login - Saya tidak punya pengalaman dengan proyek Arch Linux; wiki mungkin benar untuk distribusi tersebut, tetapi umumnya tidak benar. Informasi ini tidak benar dibandingkan dengan halaman manual zsh, dan tampaknya tidak berlaku untuk zsh di OS X (jalur yang $PATHdiatur /etc/profiletidak membuatnya ke sesi zsh saya).



Untuk menjawab pertanyaan:

di mana tepatnya saya harus menempatkan tambahan rvm, python, node dll ke $ PATH saya?

Secara umum, saya akan mengekspor saya $PATHdari ~/.zshrc, tapi layak itu memiliki membaca dari zshall halaman manual, khususnya "STARTUP / SHUTDOWN FILES" bagian - ~/.zshrcdibaca untuk interaktif kerang, yang mungkin atau mungkin tidak sesuai dengan kebutuhan Anda - jika Anda ingin $PATHuntuk setiap zshshell yang Anda panggil (baik interactivedan tidak, baik logindan tidak, dll), maka itu ~/.zshenvadalah opsi yang lebih baik.

Apakah ada file tertentu yang harus saya gunakan (yaitu .zshenv yang saat ini tidak ada dalam instalasi saya), salah satu file yang sedang saya gunakan, atau apakah itu penting?

Ada banyak file yang dibaca saat startup (periksa manhalaman yang ditautkan ), dan ada alasan untuk itu - setiap file memiliki tempat tertentu (pengaturan untuk setiap pengguna, pengaturan untuk pengguna tertentu, pengaturan untuk shell login, pengaturan untuk setiap shell, dll).
Jangan khawatir tentang ~/.zshenvtidak ada - jika Anda membutuhkannya, buatlah, dan itu akan dibaca.

.bashrcdan .bash_profileyang tidak dibaca oleh zsh, kecuali Anda secara eksplisit sumber mereka dari ~/.zshrcatau serupa; sintaks antara bashdan zshadalah tidak selalu kompatibel. Keduanya .bashrcdan .bash_profiledirancang untuk bashpengaturan, bukan zshpengaturan.

simont
sumber
3
Terima kasih atas jawaban Anda yang lebih dari simont. Aneh bahwa Anda mengatakan .bashrcdan .bash_profiletidak dibaca zshkarena saya saat ini memiliki rvmtambahan saya $PATHdi .bashrc, dan pythontambahan saya di .bash_profile, dan keduanya ditambahkan dengan baik. Bagaimanapun, saya akan memindahkan semua $PATHekspor saya ke ~/.zshrckarena semua zshkonfigurasi saya yang lain disimpan di sana. Harus saya akui, saya tidak terlalu paham dengan berbagai jenis cangkang. Dari membaca tautan yang Anda posting, saya kira saya menggunakan shell interaktif, tetapi saya akan membaca lebih lanjut untuk memastikan ... Terima kasih lagi!
stefmikhail
30

Ini adalah dokumen dari halaman manual zsh di bawah bagian 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.

Dari sini kita bisa melihat urutan file yang dibaca adalah:

/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

Anda dapat memperoleh informasi lebih lanjut di sini .

jor
sumber
18

Saya memiliki masalah yang sama (di bash terminal perintah berfungsi dengan benar tetapi zsh menunjukkan kesalahan perintah tidak ditemukan)

Larutan:


cukup tempel apa pun yang Anda tempel sebelumnya di ~ / .bashrc ke:

~/.zshrc
abe312
sumber