Jawaban:
.profile vs. .zprofileZsh berjalan ~/.zprofile, tidak ~/.profile, ketika dipanggil sebagai shell login. Alasannya adalah bahwa zsh memiliki cukup banyak ketidakcocokan dengan shell standar untuk memecah skrip.
Zsh tidak berjalan ~/.profilejika disebut sebagai shatau ksh. Tetapi jika tujuan Anda adalah untuk mendapatkan prompt zsh saat Anda masuk, itu tidak membantu.
Anda dapat membuat /bin/shshell login Anda dan memasukkannya ke export SHELL=/bin/zshdalam ~/.profile. Kemudian ketika Anda membuka terminal, terminal akan meluncurkan zsh (kecuali untuk beberapa emulator terminal tidak mematuhi $SHELLpengaturan). Tetapi Anda masih memiliki shketika Anda login lebih dari ssh. Ini dapat diatasi dengan memasukkan exec zshdi akhir ~/.profile(ini menggantikan shell yang berjalan dengan zsh), tetapi Anda harus berhati-hati hanya untuk melakukan itu untuk login interaktif dan tidak ketika ~/.profiledisertakan dari skrip lain seperti mulai sesi X (yang baik test adalah nama dari proses induk yang diperoleh dengan ps -o comm= $PPID: jika itu sshdatau su, maka aman untuk exec).
Solusi termudah untuk bekerja dengan zsh dan run ~/.profileadalah membuat ~/.zprofileyang memasuki mode emulasi sh saat dijalankan ~/.profile:
emulate sh
. ~/.profile
emulate zsh
Jika Anda memiliki zsh yang cukup baru (di Ubuntu, itu berarti sejak jelas, saya pikir), Anda dapat menyederhanakan ini menjadi emulate sh -c '. ~/.profile'.
.zprofile vs. .zshrcFile ~/.profiledimuat oleh shell login . Shell login adalah proses pertama yang dimulai ketika Anda masuk dalam mode teks, misalnya pada konsol teks atau melalui ssh. Secara default, pada sebagian besar mesin Linux, shell login adalah bash, tetapi Anda dapat mengubahnya dengan chshperintah, atau melalui beberapa alat lain seperti "Pengaturan Pengguna" di Ubuntu. Ketika itu adalah shell login, bash membaca ~/.bash_profilejika ada dan ~/.profile, sedangkan zsh hanya membaca ~/.zprofile(karena sintaksnya tidak sepenuhnya kompatibel dengan sh tradisional). Di bawah sebagian besar konfigurasi, ~/.profilejuga dimuat oleh skrip startup sesi X ketika Anda masuk di manajer tampilan grafis.
Ketika Anda memulai emulator terminal dan mendapatkan prompt shell, atau ketika Anda memulai shell secara eksplisit, Anda mendapatkan shell yang bukan shell login. Karena ~/.profile(atau ~/.zprofile) adalah untuk perintah yang ingin Anda jalankan ketika Anda masuk, shell non-login tidak membaca file ini. Sebaliknya, ketika Anda memulai zsh interaktif, bunyinya ~/.zshrc. (Zsh membaca ~/.zshrcdi semua shell interaktif, apakah itu shell login tidak; bash, anehnya, tidak pernah membaca ~/.bashrcdi shell login.)
Biasanya, ~/.profileberisi definisi variabel lingkungan, dan mungkin memulai beberapa program yang ingin Anda jalankan sekali ketika Anda masuk atau untuk seluruh sesi; ~/.zshrcberisi hal-hal yang harus dilakukan untuk setiap instance shell, seperti definisi fungsi dan alias, pengaturan opsi shell, pengaturan penyelesaian, pengaturan prompt, binding kunci, dll.
~/.profiletidak dimuat oleh zshsaat login.zshmemuat ~/.zprofilesaat login.zshmemuat ~/.zshrcsaat memulai sesi terminal baru.Perlu info lebih lanjut? Lihatlah jawaban luar biasa Gilles!
Selain jawaban Gilles, dengan versi zsh yang cukup baru Anda dapat melakukan ini:
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'
... Yang mana akan sumber file .profile dengan sh-mode zsh berlaku. Dan itu hanya aktif selama sumber. Jadi Anda tidak perlu menyimpan status opsi saat ini untuk mengulangnya lagi setelah sumber.
Saya memiliki .zprofilekompatibilitas dengan .profile(hanya berisi perubahan PATH), karenanya hanya perlu:
ln -s .profile .zprofile
The zsh dokumentasi saya ada di tangan hanya menyebutkan /etc/profiledan ~/.profilekerang masuk dalam sh / ksh modus kompatibilitas.
% zsh --version
zsh 4.3.10 …
% cat ~/.profile
echo 'Running ~/.profile...'
Shell login mode asli (argv [0] dimulai dengan -) tidak digunakan ~/.profile(meskipun akan digunakan ~/.zprofile):
% zsh -c 'exec -a -zsh zsh' </dev/null
(tidak ada output)
sh / ksh kompatibilitas kerang modus masuk menggunakan .profile:
% zsh -c 'exec -a -sh zsh' </dev/null
Running ~/.profile...
% zsh -c 'exec -a -ksh zsh' </dev/null
Running ~/.profile...