Zsh হিট করছে না ~ /। প্রোফাইল


141

আমি আমার উবুন্টু সিস্টেমে সবেমাত্র zsh ইনস্টল করেছি। দেখে মনে হচ্ছে zsh init এ ~ /। প্রোফাইল চালাচ্ছে না। আমার সেরা বোঝার জন্য, এটি একটি স্বয়ংক্রিয় আচরণ হওয়া উচিত। আমি কী মিস করছি?

উত্তর:


202

.profile বনাম .zprofile

লগইন শেল হিসাবে যখন আহ্বান করা হয় তখন জেডএস চালায় ~/.zprofileনা ~/.profile। কারণটি হ'ল স্ক্রিপ্টগুলি ভাঙার জন্য zsh এর স্ট্যান্ডার্ড শেলগুলির সাথে পর্যাপ্ত পরিমাণে অসঙ্গতি রয়েছে।

Zsh চালায় না ~/.profileযদি এটি হিসাবে shবা বলা হয় ksh। আপনি যদি লগ ইন করেন তবে আপনার উদ্দেশ্য যদি কোনও zsh প্রম্পট পাওয়া যায়, তবে এটি কোনও সহায়তা নয়।

আপনি /bin/shআপনার লগইন শেল করতে পারেন এবং এতে export SHELL=/bin/zshআপনার অন্তর্ভুক্ত করতে পারেন ~/.profile। তারপরে আপনি যখন কোনও টার্মিনাল খুলবেন, টার্মিনালটি zsh চালু করবে (কয়েকটি টার্মিনাল এমুলেটরগুলি $SHELLসেটিংটি মানবে না ।) আপনি shssh ওভার লগ ইন যখন কিন্তু আপনি এখনও থাকবে । 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.


দুর্দান্ত উত্তর! আমি ~ / .zprofile তৈরি করেছি এবং আপনার পরামর্শ অনুসারে লাইনটি রেখেছি, তবে এটি কিছুই করার মতো বলে মনে হচ্ছে না। সম্ভবত আমি .zshrc এ রাখা উচিত?
shmichael

1
@ শমিকমাইকেল: আপনার প্রতিক্রিয়া দেখিয়ে, আপনার প্রশ্নটি আপনি যেভাবে ইচ্ছা করেছেন তা আমি ব্যাখ্যা করতে পারি নি। দ্বিতীয় বিভাগটি আমি আমার উত্তরটিতে যুক্ত করেছি?
গিলস

হ্যাঁ, স্পট আঘাত। সুতরাং আমি যদি সঠিকভাবে বুঝতে পারি তবে আমি .zprofile এর উপর PATH ঘোষণা এবং .zshrc- এ উপাধিকার চাই।
shmichael

@ user1419674 সংশোধন করার জন্য আপনাকে ধন্যবাদ, তবে পোস্টে পরিবর্তন লগ যোগ করবেন না। সাইটের একটি অন্তর্নির্মিত পুনর্বিবেচনার ইতিহাস রয়েছে।
গিলস

68

অধৈর্য মানুষের জন্য সংক্ষিপ্ত উত্তর:

  1. ~/.profilezshলগইন দ্বারা লোড করা হয় না ।
  2. zsh~/.zprofileলগইন এ লোড ।
  3. zsh~/.zshrcনতুন টার্মিনাল সেশন শুরু করার সময় লোড হয় ।

আরও তথ্য প্রয়োজন? গিলসের দুর্দান্ত উত্তর দেখুন!


দুর্দান্ত উত্তর। আপনার যা দরকার তা ঠিক।
জাজানো রেইনহার্ট 13

21

গিলসের উত্তর ছাড়াও, zsh এর যুক্তিসঙ্গত সাম্প্রতিক সংস্করণ সহ আপনি এটি করতে পারেন:

[[ -e ~/.profile ]] && emulate sh -c 'source ~/.profile'

... যা zsh এর sh- মোড কার্যকর করে। প্রোফাইল ফাইল উত্স করবে। এবং এটি উত্স চলাকালীন শুধুমাত্র সক্রিয়। সুতরাং সোর্সিংয়ের পরে এটি পুনরায় খেলতে আপনার বর্তমান বিকল্প রাষ্ট্রটি সংরক্ষণ করতে হবে না।


আমার এটি আমার z / .z প্রোফাইলে রয়েছে, তবে কোনও কারণে shell /। প্রোফাইলে বিবৃতি আমার শেলটিতে পাওয়া যায় না। উবুন্টু 15.04; zsh 5.0.7
friederbluemle

কোড ব্যতীত নির্ণয় করা শক্ত।
ফ্র্যাঙ্ক টার্বেক

আমি আবার চেষ্টা করেছি এবং দেখে মনে হচ্ছে এটি এখন কাজ করছে। এটি কোনও পর্যায়ে স্থির হয়েছিল কি হয়েছিল তা নিশ্চিত নয়। zsh সংস্করণ এখন 5.1.1।
friederbluemle

5

আমার .zprofileসাথে সামঞ্জস্য .profileরয়েছে (কেবলমাত্র PATH পরিবর্তনগুলি রয়েছে), সুতরাং কেবল প্রয়োজন:

ln -s .profile .zprofile

0

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...
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.