zsh config - untuk mengekspor atau tidak untuk mengekspor?

23

Saat mengatur variabel di saya ~/.zshrcsaya bisa menggunakanexport

export PATH=/some/path

atau tidak

PATH=/some/path

Bagaimana perbedaannya dan mana yang harus saya gunakan?

jordelver
sumber
Variabel lingkungan yang juga digunakan oleh kerang non-interaktif (katakanlah, skrip shell yang Anda tulis) harus dimasukkan .zshenv.
Francisco
Apakah ~/.zshenvbersumber dari shell login juga? Harus PATHdidefinisikan di sana?
jordelver
1
PATHmungkin adalah contoh terbaik dari variabel yang harus didefinisikan di dalam ~/.zshenv, file ini bersumber dari sesi zsh apa pun (kecuali jika Anda menggunakan beberapa opsi untuk mematikannya). Lihat man zshulasan file mana yang diambil dan urutannya.
Francisco
Ok, terima kasih @Francisco saya akan membaca halaman manual.
jordelver

Jawaban:

21

Jika Anda ingin program dijalankan dari zsh untuk melihat var, eksporlah.
Untuk jalur, Anda mungkin ingin mengekspor.
Alih-alih export PATH=/some/pathAnda mungkin ingin export PATH="$PATH:/some/path", kecuali jika Anda ingin menghapus jalur preset sistem sepenuhnya.

pendiam
sumber
Bagus, terima kasih. Saya akan menggunakan ekspor sebagai aturan umum sekarang.
jordelver
21

Demure sudah menjawab pertanyaan spesifik Anda. Namun ini adalah zshpertanyaan dan pertanyaan PATH. Jadi di sini adalah hal lain: Di samping variabel standar $PATH, ada juga $path, yang merupakan array. Di sini Anda melihat perbedaannya (titik dua atau tidak ...):

$ print $PATH
/bin:/usr/bin:/usr/local/bin:/usr/X11R6/bin
$print $path
/bin /usr/bin /usr/local/bin /usr/X11R6/bin

Kedua varian secara otomatis disinkronkan. Jadi, apa manfaat menggunakan array?

  • Yang terakhir Anda dapat mendeklarasikan melalui typeset -U pathuntuk "tetap hanya kejadian pertama dari setiap nilai duplikat" (dari man zshbuiltins). Itu berarti ini menjaga jalan Anda tetap bersih, bahkan jika Anda berturut-turut sumber ~/.zshrc(karena Anda mengubahnya atau apa pun) dan jangan mengacaukannya dengan nilai yang sama lagi dan lagi.
  • Anda dapat menggunakan path+=(/new/path)untuk menambahkan direktori baru ke PATH Anda. Untuk menghapus elemen Anda harus menggunakan beberapa trik, lihat misalnya /programming//q/3435355/2037712 atau http://www.zsh.org/mla/users//2005/msg01132.html
  • Anda dapat dengan mudah mengulang elemen di PATH melalui for i ($path) { print $i # or do something else }

Akhirnya, inilah kutipan dari config saya:

typeset -U path
path=(/new/path1
      /new/path2
      $path)
export PATH
mpy
sumber
Terima kasih, itu sebenarnya pertanyaan lanjutan. Saya akan melihat mengelola jalur saya menggunakan pathdaripada PATH.
jordelver
1
Senang mendengar karena saya sudah takut bahwa saya PL. Btw. Keuntungan lain yang saya lupa: Anda dapat dengan mudah mengulang elemen for i ($path) { print $i # or do something else }.
mpy