উত্তর:
.profile
বনাম .zprofile
লগইন শেল হিসাবে যখন আহ্বান করা হয় তখন জেডএস চালায় ~/.zprofile
না ~/.profile
। কারণটি হ'ল স্ক্রিপ্টগুলি ভাঙার জন্য zsh এর স্ট্যান্ডার্ড শেলগুলির সাথে পর্যাপ্ত পরিমাণে অসঙ্গতি রয়েছে।
Zsh চালায় না ~/.profile
যদি এটি হিসাবে sh
বা বলা হয় ksh
। আপনি যদি লগ ইন করেন তবে আপনার উদ্দেশ্য যদি কোনও zsh প্রম্পট পাওয়া যায়, তবে এটি কোনও সহায়তা নয়।
আপনি /bin/sh
আপনার লগইন শেল করতে পারেন এবং এতে export SHELL=/bin/zsh
আপনার অন্তর্ভুক্ত করতে পারেন ~/.profile
। তারপরে আপনি যখন কোনও টার্মিনাল খুলবেন, টার্মিনালটি zsh চালু করবে (কয়েকটি টার্মিনাল এমুলেটরগুলি $SHELL
সেটিংটি মানবে না ।) আপনি sh
ssh ওভার লগ ইন যখন কিন্তু আপনি এখনও থাকবে । exec zsh
এর শেষে অন্তর্ভুক্ত করে এর প্রতিকার করা যেতে পারে ~/.profile
(এটি zsh দ্বারা চলমান শেলটি প্রতিস্থাপন করে) তবে আপনাকে ইন্টারেক্টিভ লগইনগুলির ক্ষেত্রে এটি করার জন্য কেবল সতর্কতা অবলম্বন করা উচিত এবং ~/.profile
এক্স সেশন শুরুর মতো অন্যান্য স্ক্রিপ্ট থেকে অন্তর্ভুক্ত করার সময় নয় (একটি ভাল পরীক্ষা হ'ল পিতামাতার প্রক্রিয়াটির নাম ps -o comm= $PPID
: এটি যদি হয় sshd
বা su
তবে এটি নিরাপদ থাকে exec
)।
Zsh এবং রান উভয়ের সাথে কাজ করার সহজ সমাধান ~/.profile
হ'ল ~/.zprofile
এটি চলমান সময় sh ইমুলেশন মোডে প্রবেশ করে এমন একটি তৈরি করা ~/.profile
:
emulate sh
. ~/.profile
emulate zsh
আপনার যদি সাম্প্রতিক পর্যায়ে Zsh থাকে (উবুন্টুতে, এর অর্থ লুসিডের পরে, আমি মনে করি) আপনি এটিকে সহজতর করতে পারেন emulate sh -c '. ~/.profile'
।
.zprofile
বনাম .zshrc
ফাইলটি লগইন শেল ~/.profile
দ্বারা লোড করা হয় । লগইন শেল হ'ল প্রথম প্রক্রিয়া যা আপনি পাঠ্য মোডে লগ ইন করার পরে শুরু হয়, উদাহরণস্বরূপ কোনও পাঠ্য কনসোল বা ssh এর মাধ্যমে। ডিফল্টরূপে, বেশিরভাগ লিনাক্স মেশিনে লগইন শেলটি ব্যাশ হয় তবে আপনি এটি কমান্ডের সাহায্যে বা উবুন্টুতে "ব্যবহারকারী সেটিংস" এর মতো অন্য কোনও সরঞ্জামের মাধ্যমে পরিবর্তন করতে পারেন । এটি যখন লগইন শেল হয় তখন বাশ উপস্থিত থাকে কিনা তা পড়ে এবং zsh কেবল পঠন করে (কারণ এর সিনট্যাক্সটি traditionalতিহ্যবাহী sh এর সাথে সম্পূর্ণ সুসংগত নয়)। বেশিরভাগ কনফিগারেশনের অধীনে, আপনি গ্রাফিকাল ডিসপ্লে ম্যানেজারে লগ ইন করার সময় এক্স সেশন প্রারম্ভিক স্ক্রিপ্টগুলিও লোড করা হয়।chsh
~/.bash_profile
~/.profile
~/.zprofile
~/.profile
আপনি যখন টার্মিনাল এমুলেটরটি শুরু করেন এবং শেল প্রম্পট পাবেন বা আপনি যখন শেল স্পষ্টভাবে শুরু করবেন তখন আপনি একটি শেল পাবেন যা লগইন শেল নয়। যেহেতু ~/.profile
(বা ~/.zprofile
) আপনি লগ ইন করার সময় যে আদেশগুলি কার্যকর করতে চান তার জন্য, একটি লগ-ইন শেল এই ফাইলটি পড়বে না। পরিবর্তে, যখন আপনি একটি ইন্টারেক্টিভ zsh শুরু করেন, এটি পড়ে ~/.zshrc
। (জেডএস ~/.zshrc
সমস্ত ইন্টারেক্টিভ শেলগুলিতে পড়েন , তারা লগইন শেলগুলি কিনা তা নয়; বাশ, আশ্চর্যের বিষয়, ~/.bashrc
লগইন শেলগুলিতে কখনও পড়েন না))
সাধারণত, ~/.profile
পরিবেশের পরিবর্তনশীল সংজ্ঞা থাকে এবং আপনি কিছু প্রোগ্রাম শুরু করতে পারেন যা আপনি একবার লগ ইন করার সময় বা পুরো সেশনের জন্য চালাতে চান; ~/.zshrc
প্রতিটি শেল ইনস্ট্যান্সের জন্য অবশ্যই এমন জিনিসগুলি অন্তর্ভুক্ত করা উচিত যেমন যেমন ওরফে এবং ফাংশন সংজ্ঞা, শেল বিকল্প সেটিংস, সমাপ্তি সেটিংস, প্রম্পট সেটিংস, কী বাইন্ডিং ইত্যাদি etc.
~/.profile
zsh
লগইন দ্বারা লোড করা হয় না ।zsh
~/.zprofile
লগইন এ লোড ।zsh
~/.zshrc
নতুন টার্মিনাল সেশন শুরু করার সময় লোড হয় ।আরও তথ্য প্রয়োজন? গিলসের দুর্দান্ত উত্তর দেখুন!
গিলসের উত্তর ছাড়াও, zsh এর যুক্তিসঙ্গত সাম্প্রতিক সংস্করণ সহ আপনি এটি করতে পারেন:
[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'
... যা zsh এর sh- মোড কার্যকর করে। প্রোফাইল ফাইল উত্স করবে। এবং এটি উত্স চলাকালীন শুধুমাত্র সক্রিয়। সুতরাং সোর্সিংয়ের পরে এটি পুনরায় খেলতে আপনার বর্তমান বিকল্প রাষ্ট্রটি সংরক্ষণ করতে হবে না।
আমার .zprofile
সাথে সামঞ্জস্য .profile
রয়েছে (কেবলমাত্র PATH পরিবর্তনগুলি রয়েছে), সুতরাং কেবল প্রয়োজন:
ln -s .profile .zprofile
Zsh ডকুমেন্টেশন আমি হাত আছে শুধুমাত্র উল্লেখ /etc/profile
এবং ~/.profile
এ লগইন শাঁস জন্য SH / ksh সামঞ্জস্য মোড।
% zsh --version
zsh 4.3.10 …
% cat ~/.profile
echo 'Running ~/.profile...'
নেটিভ মোড লগইন শেল (আরজিভি [0] দিয়ে শুরু হয় -
) ব্যবহার করে না ~/.profile
(এটি ~/.zprofile
যদিও ব্যবহার করবে ):
% zsh -c 'exec -a -zsh zsh' </dev/null
(আউটপুট নেই)
SH / ksh compatability মোড লগইন শাঁস .profile ব্যবহার করে:
% zsh -c 'exec -a -sh zsh' </dev/null
Running ~/.profile...
% zsh -c 'exec -a -ksh zsh' </dev/null
Running ~/.profile...