ওএসএক্স লগইন শেলগুলিতে ডিফল্টরূপে ইন্টারেক্টিভ শেলগুলি কেন?


43

লিনাক্স এবং, আমার জানা মতে, সমস্ত ইউনিক্স সিস্টেম, টার্মিনাল এমুলেটরগুলি ডিফল্টরূপে ইন্টারেক্টিভ, লগ-ইন শেল চালায়। এর অর্থ হ'ল বাশের জন্য, শুরু করা শেলটি:

যখন একটি ইন্টারেক্টিভ শেল করে একটি লগ-ইন শেল নয় আরম্ভ করা হলে ব্যাশ পড়ে এবং থেকে, executes কমান্ড /etc/bash.bashrcএবং ~/.bashrc, যদি এই ফাইলগুলি বিদ্যমান। --norc বিকল্পটি ব্যবহার করে এটি বাধা দেওয়া হতে পারে ।

--rcfile ফাইল বিকল্প পড়া এবং পরিবর্তে ফাইল থেকে কমান্ড চালানো ব্যাশ বাধ্য করা হবে /etc/bash.bashrcএবং ~/.bashrc

এবং লগইন শেলগুলির জন্য:

যখন বাশকে একটি ইন্টারেক্টিভ লগইন শেল বা বিকল্প হিসাবে একটি ইন্টারেক্টিভ শেল হিসাবে ডাকা হয় --login, এটি প্রথমে ফাইল থেকে কমান্ডগুলি পড়ে এবং কার্যকর করে /etc/profile, যদি সেই ফাইলটি বিদ্যমান থাকে। যে ফাইল পড়ার পর, এটা জন্য দেখায় ~/.bash_profile, ~/.bash_loginএবং ~/.profile, যাতে, এবং পড়ে এবং প্রথম এক যে বিদ্যমান এবং পাঠযোগ্য থেকে, executes কমান্ড।

--noprofileবিকল্প ব্যবহার করা যেতে পারে যখন শেল এই আচরণ বাধা হতে শুরু করেছে।

ওএসএক্সে, তবে, ডিফল্ট শেলটি (যা বাশ হয়) প্রকৃত সূত্র ~/.bash_profileবা ~.profileঅন্য কথায়, এটি লগইন শেলের মতো কাজ করে।

মূল প্রশ্ন : ডিফল্ট ইন্টারেক্টিভ শেলটি ওএসএক্সে লগইন শেল কেন? ওএসএক্স কেন এটি করতে বেছে নিয়েছিল? এর অর্থ এই যে সমস্ত নির্দেশাবলী / শেল ভিত্তি জিনিসের জন্য টিউটোরিয়াল যে অনেক কিছু পরিবর্তন উল্লেখ ~/.bashrcউপর ওএসএক্স বা তদ্বিপরীত জন্য ব্যর্থ হবে ~/.profile। তবুও, অ্যাপলকে অনেক অভিযোগ দায়ের করা যেতে পারে, অযোগ্য বা বুদ্ধিমান দেবদের ভাড়া নেওয়া সেগুলির মধ্যে একটি নয়। সম্ভবত, তাদের এটির জন্য ভাল কারণ ছিল, তবে কেন?

সাবেকশনস: টার্মিনাল.এপগুলি আসলে একটি ইন্টারেক্টিভ লগইন শেল চালায় বা তারা বাশের আচরণ পরিবর্তন করেছে? এটি টার্মিনাল.অ্যাপের সাথে নির্দিষ্ট বা এটি টার্মিনাল এমুলেটর থেকে পৃথক?


2
টার্মিনাল.এপ একটি লগইন শেল চালায়। অ্যাপল কেন এটি করতে বেছে নিয়েছে তা আমি জানি না।
গিলস 'অশুভ হওয়া বন্ধ করুন' 1

উত্তর:


33

এটা হচ্ছে অনুমিত কাজ যে, সময়ে যখন আপনি একটি শেল প্রম্পট পেতে, উভয় .profileএবং .bashrcহয়েছে ফেলেছেন। আপনি কীভাবে সেই পর্যায়ে পৌঁছবেন তার সুনির্দিষ্ট বিবরণগুলি গৌণ প্রাসঙ্গিকতার সাথে সম্পর্কিত, তবে ফাইলগুলির মধ্যে কোনও একটিই যদি চালিত না হয় তবে আপনার কাছে অসম্পূর্ণ সেটিংস সহ একটি শেল থাকবে।

লিনাক্স (এবং অন্যান্য এক্স-ভিত্তিক সিস্টেমের) এ কারণে টার্মিনাল emulators না প্রয়োজন চালানোর জন্য .profileনিজেদের এটি স্বাভাবিকভাবে ইতিমধ্যে চালানো হয়েছে হবে যখন আপনি এক্স করতে লগ ইন করতে সেটিংসে হয় .profileধরনের যে হতে পারে হতে অনুমিত হয় সাব-প্রসেসিস দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত, সুতরাং যতক্ষণ না আপনি একবার লগইন করার সময় এটি কার্যকর করা হয় (যেমন: মাধ্যমে .Xsession), পরবর্তী কোনও সাবহেলগুলি এটিকে পুনরায় চালানোর প্রয়োজন হয় না।

হিসাবে ডেবিয়ান উইকি পাতা অ্যালান Shutko দ্বারা সংযুক্ত ব্যাখ্যা করেছেন:

"তার .bashrcথেকে আলাদা ফাইল কেন .bash_profile, তবে এটি বেশিরভাগ historicalতিহাসিক কারণেই করা হয়, যখন আজকের ওয়ার্কস্টেশনের তুলনায় মেশিনগুলি অত্যন্ত ধীর ছিল commands কমান্ডগুলি প্রসেস করতে .profileবা .bash_profileবেশ দীর্ঘ সময় নিতে পারে, বিশেষত এমন একটি মেশিনে যেখানে কাজ অনেক কাজ করে বহিরাগত কমান্ড (প্রাক-বাশ) দ্বারা সম্পন্ন করা হয়েছিল So সুতরাং কঠিন প্রাথমিক সেট আপ কমান্ডগুলি, যা পরিবেশের ভেরিয়েবলগুলি তৈরি করে যা শিশু প্রসেসে সঞ্চারিত হতে পারে, সেট করা হয় .bash_profileinher উত্তরাধিকার সূত্রে প্রাপ্ত অস্থায়ী সেটিংস এবং উপকরণগুলি রাখে মধ্যে .bashrc, যাতে তারা হতে পারে যে subshell দ্বারা পুনরায় পড়া। "

সমস্ত একই বিধিগুলি ওএসএক্সকে ধরে রাখে, একটি জিনিস ব্যতীত - .profileআপনি লগ ইন করার পরে ওএসএক্স জিইউআই চলবে না, দৃশ্যত কারণ এটির বৈশ্বিক সেটিংস লোড করার নিজস্ব পদ্ধতি রয়েছে। তবে এর অর্থ হ'ল ওএসএক্সে একটি টার্মিনাল এমুলেটরটি চালানোর দরকার নেই.profile (শেলটি এটি প্রবর্তন করে যে এটি লগইন শেল বলে), অন্যথায় আপনি সম্ভাব্য পঙ্গু শেলটি দিয়ে শেষ করতে চান।


এখন, অন্যান্য ধরণের শাঁস দ্বারা ভাগ না করা বাশের এক ধরণের অদ্ভুত অদ্ভুততা .bashrcএটি লগইন শেল হিসাবে শুরু করা থাকলে এটি স্বয়ংক্রিয়ভাবে চলবে না । এর জন্য মানক কাজটি হচ্ছে নিম্নলিখিত কমান্ডগুলির মতো কিছু অন্তর্ভুক্ত করা .bash_profile:

[[ -e ~/.profile ]] && source ~/.profile    # load generic profile settings
[[ -e ~/.bashrc  ]] && source ~/.bashrc     # load aliases etc.

বিকল্পভাবে, এটি মোটেই না থাকা সম্ভব এবং প্রয়োজনে চালানোর জন্য .bash_profileজেনেরিক .profileফাইলটিতে কিছু বাশ-নির্দিষ্ট কোড অন্তর্ভুক্ত করা উচিত .bashrc

যদি ওএসএক্স ডিফল্ট হয় .bash_profileবা .profile এটি না করে , তবে এটি ত্রুটিযুক্ত একটি বাগ। যে কোনও ক্ষেত্রে, সঠিক কাজটি হ'ল এই লাইনগুলিকে কেবল যুক্ত করা .bash_profile


সম্পাদনা: strugee নোট হিসাবে , উপর ওএসএক্স ডিফল্ট শেল tcsh শেল, যার আচরণ এই কর্ম অনেকাংশে saner হয় ব্যবহার করা হয় যখন একটি ইন্টারেক্টিভ লগ-ইন শেল হিসাবে চালায় tcsh স্বয়ংক্রিয়ভাবে উভয় সার্চ .profile এবং .tcshrc / .cshrcমত কোন সমাধান নীচে উপস্থিত দরকার নেই, এবং এইভাবে .bash_profileকৌতুক উপরে দেখানো হয়েছে।

এর উপর ভিত্তি করে, আমি 99% নিশ্চিত যে ওএসএক্সের উপযুক্ত ডিফল্ট সরবরাহ করতে ব্যর্থতা .bash_profileহ'ল কারণ, তারা যখন টিসিএসএস থেকে ব্যাশে চলে আসে তখন অ্যাপলের লোকেরা কেবল বাশের স্টার্টআপ আচরণে এই ছোট্ট ওয়ার্টটি লক্ষ্য করেনি। Tcsh সহ, এই জাতীয় কোনও কৌশলগুলির প্রয়োজন হয়নি - একটি ওএসএক্স টার্মিনাল এমুলেটর জাস্ট প্লেইন ওয়ার্কস থেকে লগইন শেল হিসাবে tcsh শুরু করা এবং এ জাতীয় ক্লুজগুলি ছাড়াই সঠিক কাজ করে।


1
ধন্যবাদ, আমি সব কিছু জানতাম। আমার প্রশ্ন হল ওএসএক্স কেন.bashrc অপ্রাসঙ্গিকভাবে রেন্ডার করার জন্য এমনভাবে সেট আপ করতে বেছে নিয়েছিল ? তারা কেন সমস্ত শেল লগইন শেল করতে বেছে নিয়েছিল? আমি যতদূর বলতে পারি, কেবলমাত্র আপনার শেষ বাক্যটি এটির ঠিকানা দেয় এবং কেবল এটি বলার জন্য।
টেরডন

1
না, সমস্যাটি হ'ল তারা তাদের টার্মিনাল এমুলেটরগুলিতে লগইন শেলগুলি শুরু করে। ডটফাইলগুলি ডিফল্ট বাশ আচরণ, লগইন শেলগুলি প্রোফাইল ইত্যাদি পড়বে, বাশার্ক নয় etc. ইত্যাদি The প্রশ্নটি কেন লগ-ইন শেলগুলির পরিবর্তে লগইন শেলগুলি চালানো হয়।
টেরডন

2
হ্যাঁ, এবং আমি এবং অ্যালান দুজনেই ব্যাখ্যা করেছি যে এটি লিনাক্সের বিপরীতে, ওএসএক্স কার্যকর করে না .profileযখন ব্যবহারকারীরা জিইউআইতে $PATHলগইন করে , তাই পরিবেশগত ভেরিয়েবলগুলি যেমন সাধারণত সেট .profileকরা থাকে তা সঠিকভাবে কনফিগার করার জন্য তাদের পরে এটি সম্পাদন করতে হয় । পার্শ্ব প্রতিক্রিয়া হিসাবে, .bashrcএটি উত্সাহিত না হওয়ার কারণ হ'ল একটি বাগ; আপনি এটি ব্যাশে বা ওএসএক্স-এ কোনও ত্রুটিযুক্ত কিনা তা নিয়ে তর্ক করতে পারেন তবে সঠিক আচরণটি পরিবেশের ভেরিয়েবল .profileএবং বাশ কনফিগার সেটিং .bashrcউভয়ই লোড হয়েছে কিনা তা নিশ্চিত করার জন্য এটি পরিবর্তন করে না।
ইলমারি করোনেন

1
রয়ে .bashrcউৎস .profile, একটি খারাপ ধারণা হবে যেহেতু এটি পুনরায় চালানোর প্রতি subshell কারণ হবে হবে .profile। যদি অন্য কিছু না হয় তবে এটি সাধারণ বুদ্ধিমানের কারণে অতিরিক্ত অর্থ প্রদানের প্রেরক চালিয়ে যাওয়া .profileপছন্দ export PATH = "$HOME/bin:$PATH"করে $PATH.profileউত্স থাকা .bashrcঅনেক বেশি অর্থবোধ করে, তবে এটির শেলটি যে অধীনে চলছে তা পরীক্ষা করার পরে কেবল প্রকৃতপক্ষে বাশ। রয়ে .bash_profileউৎস উভয় .profile এবং .bashrc , যেমন আমি উপরের প্রস্তাবিত, আইএমও, সবচেয়ে বিচক্ষণ বিকল্প।
ইলমারি করোনেন

2
এবং আমি উত্তর দিচ্ছি "তারা লগইন শেলটি কেন ব্যবহার করে?" "কারণ তারা লোড প্রয়োজন .profile", যখন উত্তর "তারা কেন উৎস কি .bashrcথেকে .profileতারপর,?" হয় "কারণ এটি একটি বাগ সংশোধন আছে!" গুরুতরভাবে, এটি সম্ভবত উদ্দেশ্যমূলক সিদ্ধান্ত হতে পারে না; এটি কেবল তারা কিছু উপেক্ষা করেছে, সম্ভবতঃ কারণ, ম্যাক বাস্তুসংস্থায় শেলগুলি দ্বিতীয় শ্রেণির নাগরিক যা বেশিরভাগ ব্যবহারকারীদের সাথে আচরণ করার কথা নয়। (গীত।
Aতিহাসিক

14

এক্স টার্মিনাল অ্যাপ্লিকেশনগুলি ডিফল্টরূপে নন-লগইন শেলগুলি চালানোর প্রধান কারণ হ'ল সময়ের শুরুতে, আপনার .Xsession আপনার প্রাথমিক লগইন আইটেমগুলি সেট আপ করতে। প্রোফাইলটি চালিত। তারপরে, যেহেতু এটি ইতিমধ্যে সেট আপ ছিল, টার্মিনাল অ্যাপ্লিকেশনগুলি এটি চালানোর প্রয়োজন ছিল না, তারা .bashrc চালাতে পারে। এই বিষয়টি কেন গুরুত্বপূর্ণ তা নিয়ে আলোচনা https://wiki.debian.org/DotFiles এ রয়েছে :

উদাহরণস্বরূপ xdm নেওয়া যাক। পিয়ের একদিন ছুটি থেকে ফিরে এসে আবিষ্কার করে যে তার সিস্টেম প্রশাসক ডিবিয়ান সিস্টেমে xdm ইনস্টল করেছেন। সে ঠিকঠাক লগইন করে, এবং এক্সডিএম তার .xsession ফাইলটি পড়ে এবং ফ্লাক্সবাক্স চালায়। ভুল লোকালে সে ত্রুটির বার্তা না পাওয়া পর্যন্ত সবকিছু ঠিক আছে বলে মনে হচ্ছে! যেহেতু তিনি তার .বাশ_প্রোফাইলে ল্যাঙ্গ ভেরিয়েবলটি ওভাররাইড করেন এবং xdm যেহেতু কখনওই .বাশ_প্রোফাইলটি পড়েন না, তার ল্যাং ভেরিয়েবলটি এখন fr_CA এর পরিবর্তে en_US এ সেট করা আছে।

এখন, এই সমস্যার নিষ্পাপ সমাধানটি হ'ল "এক্সটার্ম" প্রবর্তন না করে তার উইন্ডো ম্যানেজারটিকে "xterm -ls" চালু করার জন্য কনফিগার করতে পারেন। এই পতাকাটি xterm কে বলে যে একটি সাধারণ শেল চালু করার পরিবর্তে এটি লগইন শেলটি চালু করা উচিত। এই সেটআপের অধীনে, এক্সটার্ম স্প্যান / বিন / বাশ কিন্তু এটি "- / বিন / বাশ" (বা সম্ভবত "-বাশ") আর্গুমেন্ট ভেক্টরে রাখে, সুতরাং ব্যাশ লগইন শেলের মতো কাজ করে। এর অর্থ হ'ল তিনি যখনই নতুন এক্সটার্ম খোলেন তখন এটি / ইত্যাদি / প্রোফাইল এবং .বাশ_প্রোফাইল (অন্তর্নির্মিত বাশ আচরণ) পড়বে এবং তারপরে .বাশার্ক (কারণ .ব্যাশ_প্রোফাইল তা করতে বলেছে)। এটি প্রথমে ঠিকঠাক বলে মনে হতে পারে - তার ডট ফাইলগুলি ভারী নয়, তাই তিনি বিলম্বটিও লক্ষ্য করেন না - তবে আরও একটি সূক্ষ্ম সমস্যা রয়েছে। তিনি সরাসরি তার ফ্লাক্সবক্স মেনু থেকে একটি ওয়েব ব্রাউজার চালু করেন, এবং ওয়েব ব্রাউজারটি ফ্লাক্সবক্স থেকে ল্যাং ভেরিয়েবলের উত্তরাধিকার সূত্রে প্রাপ্ত, যা এখন ভুল লোকালে সেট করা আছে। সুতরাং তার এক্সটার্মগুলি সূক্ষ্ম হতে পারে এবং তার এক্সটার্মগুলি থেকে যে কোনও কিছুই চালু করা ভাল হতে পারে, তার ওয়েব ব্রাউজারটি এখনও তাকে ভুল লোকেলের পাতাগুলি দিচ্ছে।

ওএস এক্স-এ, ব্যবহারকারীর পরিবেশগুলি শেল স্ক্রিপ্টগুলির একটি গাদা দ্বারা শুরু হয় না এবং লঞ্চ করা হয় না। (এটি এক ধরণের লজ্জার বিষয়, যেহেতু এটির অর্থ পরিবেশের ভেরিয়েবল সেট করা অনেক বেশি বিরক্তিকর, তবে এরকম জীবন)) যেহেতু এটি হয় না, কখন এটি চালাবেন? প্রোফাইলে? শুধু যদি আপনি ssh'd? এটি এক ধরণের অর্থহীন বলে মনে হচ্ছে, যেহেতু অনেকগুলি বক্স কখনই এসএসএসের টার্গেট হতে পারে না। এছাড়াও টার্মিনালগুলি ডিফল্টরূপে লগইন শেলগুলি চালিত করতে পারে, যাতে। প্রোফাইলটি কোনও এক সময় চালানো হবে।

.Bashrc, তাহলে কি? এটা কি অকেজো? না। এটি এখনও ভিটি 100 এর দিনগুলিতে উদ্দেশ্য ছিল। আপনি কোনও টার্মিনাল উইন্ডো খোলার বাইরে অন্য কোনও শেল খোলার জন্য এটি ব্যবহার করা হয়। সুতরাং আপনি যদি ইমাস বা vi এর বাইরে চলে যান বা আপনি যদি কোনও ব্যবহারকারী ব্যবহার করেন।


1
আপনি যে দেবিয়ান পৃষ্ঠাটি উদ্ধৃত করছেন সেটি কেন দেবিয়ান .profileসূত্রগুলি ব্যাখ্যা করে .bashrc, কেন ওএসএক্স ডিফল্টরূপে সমস্ত শেলগুলি লগইন শেল করার সিদ্ধান্ত নেয় not আসলে, আপনি আমার অন্য প্রশ্নের উত্তর দিচ্ছেন , এবং ধন্যবাদ! তবে, আপনার উত্তরটি ওএসএক্সের পছন্দটি ব্যাখ্যা করে না এবং দেবিয়ান উক্তিটি যতদূর আমি বলতে পারি এখানে সম্পূর্ণ অপ্রাসঙ্গিক (দয়া করে আমাকে জানাবেন যে আমি কেবলমাত্র পয়েন্টটি মিস করছি)। ওএসএক্স উপায় ইত্যাদিকে .bashrcঅকেজো করে তোলে এবং এটি .profileকোনও উপকারী হয় না ।
টেরডন

4

তারা কেন এমন করত তা আমি জানি না। তবে এখানে আমার অনুমান।

শুরু করার জন্য, এটি লক্ষণীয় যে কোনও জিএনইউ / লিনাক্স সিস্টেমে আপনি অবশ্যই ভিটি 1, ভিটি 2 ইত্যাদি স্যুইচ করতে পারেন আপনি সেখানে একটি লগইন শেল পাবেন। একটি ওএস এক্স সিস্টেমে, এর সমতুল্য নেই। ইউএনআইএক্স আন্ডারপিনিংগুলিতে অ্যাক্সেসের একমাত্র উপায় হ'ল টার্মিনাল এমুলেটর বা একক ব্যবহারকারী মোডের মাধ্যমে (অস্বীকৃতি: আমি বাস্তবে কখনও একক ব্যবহারকারী মোড ব্যবহার করি নি; এটি কমান্ডলাইন চালিত আইআইআরসি তবে আমি ভুল হতে পারি)। অতএব, ওএস এক্সে এমুলেটরটিতে যে কোনও ডিফল্টই হ'ল পুরো সিস্টেমের জন্য ডিফল্ট।

এখন, আপনি ডিফল্টটিকে লগইন শেল তৈরি করবেন কেন? এটি করার জন্য আমি ভাবতে পারি এমন একটি দম্পতি রয়েছে (পড়ুন: অনেকগুলি নয়)।

  • আপনি যদি বক্সে এসএসএইচ করেন তবে এটি একটি সুসংগত ব্যবহারকারীর অভিজ্ঞতা সরবরাহ করে। (ওএস এক্স এর সার্ভার সংস্করণটির জন্য বিশেষত গুরুত্বপূর্ণ - সম্ভবত আপনি যদি কোনও ওএস এক্স সার্ভার চালাচ্ছেন তবে আপনি একজন নবাগত))
  • ওএস এক্সের ডিফল্ট শেল ব্যবহৃত হত tcsh। এটি আপনার কাছ থেকে যতটা অনুমান পেতে পারে ততটা বুনো, তবে tcshলগইন শেল হিসাবে চালানোর সময় এটি সাধারণত কিছু কাজ করতে পারে এবং historicalতিহাসিক নিদর্শন আটকে থাকতে পারে। (যদিও আমি এটি সন্দেহ করি - সম্ভবত কোনও বয়স্ক নিয়মিত আমাদের বলতে পারেন))
  • "আমরা অ্যাপল। আমরা গ্রহের বৃহত্তম ইউনিক্স বিতরণের বিক্রেতারা। আমাদের কারণগুলি কতটা তুচ্ছ তা বিবেচনাধীন নয়; আমরা যদি সিদ্ধান্ত নিই তবে আপনার হাতিয়ারটিকে অবশ্যই এটি মোকাবেলা করতে হবে।"

সত্য, আমি ডারউইনকে ~ 6 বছর ধরে ব্যবহার করছি এবং আমি এই প্রশ্নের সঠিক উত্তর দিতে পারি না। এটি আসলেই আমার কাছে বোধগম্য নয়।

আপনার অনুমানের উত্তর দেওয়ার bashজন্য, কোনও প্যাচড বা কিছু নয় (কমপক্ষে এটির জন্য)। ডিফল্ট টার্মিনাল এমুলেটর ডিফল্টরূপে লগইন শেলগুলি চালায় এবং সম্ভবত এটিটির্ম অনুলিপি করে।


1
যখন একটি ইন্টারেক্টিভ লগ-ইন শেল হিসাবে শুরু tcsh শেল উত্স: tcsh শেল উল্লেখ, যেহেতু তার আচরণ পর্যন্ত ব্যাশ যে এর চেয়ে এ ব্যাপারে saner হয় জন্য +1 উভয় .profile এবং .tcshrc/ .cshrcআমি আমার উত্তর দিলাম মত কোন kluges প্রয়োজন ছাড়া। দেওয়া হয়েছে, আমি সন্দেহ করি যে আচরণটি টিসিএসএস থেকে ব্যাশে স্যুইচ করার কারণে একটি অনুপযুক্ত রিগ্রেশন।
ইলমারি করোনেন

@ ইলমারিকারোনেন আপনার কি বোঝানো হয়েছে (এখানে এবং সেখানে ) যে টিসিএস উত্স .loginএবং .tcshrc/ .cshrc? এটি tcsh উত্স থেকে কোন ধারণা করতে পারে .profile; এটিতে shসিনট্যাক্স সহ কমান্ড রয়েছে যা tcshগ্রহণ করবে না। আমার কাছে ম্যাকোস নেই তবে আমি /bin/tcshউবুন্টু 16.04 এ আমার লগইন শেলটি তৈরি করেছি। .profileটক না tcsh (1) সেই ফাইলটি উল্লেখ করে না, বা এই tcsh (1) ব্যবহার করে না
এলিয়াহ

3

এটি বর্তমান অবস্থার আপডেট: নতুন ম্যাকোএসএক্স সংস্করণ প্রকাশিত হওয়ার সাথে সাথে লগইন আচরণের পরিবর্তন হওয়ার সাথে উত্তরগুলি বাসি হয়ে গেছে।

এই প্রশ্নটি 2014 সালে জিজ্ঞাসা করা হয়েছিল এবং উত্তর দেওয়া হয়েছিল different আমি বিভিন্ন লিনাক্স ডিস্ট্রো এবং বিএসডি জুড়ে ব্যবহার করার জন্য একটি সাধারণ .Bashrc & .bash_profile সেট তৈরি করার প্রয়াসে এই বিষয়টি নিয়ে গবেষণা করছি (তারা যদি তারা ড্রেস না করে তবে তারা তাদের ডাকবে)।

আমি সম্প্রতি সিয়েরা ইনস্টল করা একটি ব্যবহৃত ম্যাক মিনি কিনেছি, সুতরাং আমার এখন 10.6, 10.10, 10.11 এবং 10.12 সহ সিস্টেম রয়েছে। যদিও আমি পুরানোগুলি ছাঁটাই করেছি (তাদের পূর্বের অবস্থার দিকে চিহ্ন রেখেছি), তবে 10.12 সিয়েরা ইনস্টলেশনটি স্পর্শযোগ্য নয়।

ফলাফল: 10.12 সিয়েরায়, কোনও ডিফল্ট নেই .Bashrc, .Bash_profile, বা। প্রোফাইল তৈরি করা হয়েছে। ইন / ইত্যাদিতে, বাশার্ক, বাশার্ক_অ্যাপেল_টার্মিনাল এবং প্রোফাইল রয়েছে। / ইত্যাদি / প্রোফাইলের বিষয়বস্তু:

# System-wide .profile for sh(1)

if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

if [ "${BASH-no}" != "no" ]; then
    [ -r /etc/bashrc ] && . /etc/bashrc
fi

/ ইত্যাদি / বাশার্কের সামগ্রী:

# System-wide .bashrc file for interactive bash(1) shells.
if [ -z "$PS1" ]; then
   return
fi

PS1='\h:\W \u\$ '
# Make bash check its window size after a process completes
shopt -s checkwinsize

[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"

/ Etc / bashrc_Apple_Terminal স্ক্রিপ্টটি PROMPT_COMMAND ভেরিয়েবল সেট করে এবং প্রতিটি টার্মিনালের সেশন স্টেট সংরক্ষণের জন্য একটি প্রক্রিয়া সেট করে; যদি টার্মিনাল অ্যাপটি ছেড়ে যায়, অ্যাপ্লিকেশনটি আবার শুরু করা হলে পূর্ববর্তী সেশনের স্থিতি পুনরুদ্ধার করা হবে। অন্যথায়, প্রায় কোনও কিছুই (ন্যূনতম $ PS1) / etc / বাশার্কে সেট করা নেই, অন্য কোনও স্বনির্ধারণ (বাস্তব $ পিএস 1, এলিয়াস, ফাংশন)। / .Bashrc এবং $ PATH সেটিংসগুলিতে .bash_profile (অথবা। প্রোফাইলে সেট করা) রেখে যাবে leaving .bash_profile দ্বারা উত্সাহিত)।

আমি নিশ্চিত করেছি যে লগ ইন সেশন শুরু করার ডিফল্ট আচরণটি দৃশ্যমান এবং সম্পাদনা করা যেতে পারে আইটিার্ম 2 টার্মিনাল অ্যাপের মতোই আচরণ করে।

আপনি যদি কোনও এক্স 11 (এখন এক্সকিয়ার্টজ) এক্সটার্ম টার্মিনাল সেশনটি চালনা করেন তবে আপনি একটি লিনাক্স সিস্টেমের মতো একটি লগইনবিহীন অধিবেশন দেখতে পাবেন; .বাশ_প্রোফাইল (বা। প্রোফাইলে) এড়ানো হয় এবং আপনি কেবল .Bashrc পান।

এবং, এখানে আমার উত্তর:

যদিও টার্মিনাল অ্যাপ্লিকেশনটি xterm (TERM = xterm-256color) হিসাবে দাবি করেছে, এটি এক্স 11 ইনস্টল না করা হলে it DISPLAY ভেরিয়েবল সেট করে না। আমরা একটি এক্স পরিবেশের সিমুলেশন দেখছি, তবে সম্পূর্ণ বাস্তবের নয়। যদি আপনি-এক্স সুইচ (এক্স 11 ফরোয়ার্ডিং সক্ষম করুন) দিয়ে অন্য কোনও সিস্টেমে এসএসএইচ করেন তবে এটি কোনও ব্যর্থ হবে কারণ $ ডিসপ্লে ভেরিয়েবল নেই। আপনি যদি এক্স 11 ইনস্টল করে থাকেন তবে এসএসএইচ অন্য সিস্টেমে এক্স এক্স 11 ফরওয়ার্ডিং সফল হবে।

নীচের লাইন (এবং সংক্ষিপ্ত উত্তর): টার্মিনাল অ্যাপ্লিকেশনটি সত্যিকারের এক্স 11 টার্মিনাল নয় (সেট করে না $ DISPLAY); এটি এক্সটিার্ম সেশনের চেয়ে এসএসএইচ লগইনের মতো অনেক বেশি আচরণ করে, এতে / ইত্যাদি / প্রোফাইল এবং ~ / .bash_profile বা ~ /। প্রোফাইল থেকে মান নির্ধারণ করতে লগইন সেশন হতে হয়


0

উপরের উত্তরগুলি ইন্টারেক্টিভ শেলগুলি ম্যাকোজে ডিফল্টরূপে লগইন শেলগুলির কারণ ব্যাখ্যা করেছে: সেটিংস ইন /etc/profile, ~/.profileএক্স-ভিত্তিক সিস্টেমে লগ-ইন শেল দ্বারা উত্তরাধিকার সূত্রে প্রাপ্ত, তবে ম্যাকোজে নয় । এখানে আমি আপনাকে মনে করিয়ে দিতে চাই যে আপনার অস্তিত্বের কারণে আপনার সর্বদা ম্যাকোজে লগইন শেল ব্যবহার করা উচিত path_helper:

 cat /etc/profile # or cat /etc/zprofile
# System-wide .profile for sh(1)

if [ -x /usr/libexec/path_helper ]; then
    eval `/usr/libexec/path_helper -s`
fi

if [ "${BASH-no}" != "no" ]; then
    [ -r /etc/bashrc ] && . /etc/bashrc
fi

path_helperউপযোগ ডিরেক্টরিগুলি থেকে ফাইলগুলিকে বিষয়বস্তু সার্চ /etc/paths.dএবং /etc/manpaths.d এবং তাদের বিষয়বস্তু appends PATHএবং MANPATHযথাক্রমে বিভিন্ন পরিবেশের। ( MANPATHপরিবেশে ইতিমধ্যে সেট না করা থাকলে viভেরিওনমেন্ট ভেরিয়েবলটি পরিবর্তন করা হবে না))

আপনি যদি লগ-ইন না করে শেল ব্যবহার করেন তবে কিছু পাথ আমদানি করা হবে না।

আমি মনে করি বিকাশকারীদের /etc/paths.dতাদের পথের মানগুলি আমদানি করার জন্য একটি ফাইল স্থাপন করা সর্বদা ভাল ধারণা , তবে কলযোগ্য বাইনারিগুলিকে /usr/binবা এর মতো অবস্থানগুলিতে সিমলিংক না করে /bin। (ডিফল্টটি PATHহ'ল /usr/bin:/bin:/usr/sbin:/sbinসকলেই হোমব্রিউ বা ম্যাকপোর্টগুলি কাস্টম মান যুক্ত করে PATHনা So সুতরাং কল করার যোগ্য আদেশগুলির প্রতিলিপি রাখার জন্য কোনও নিরাপদ জায়গা নেই))

ফাইলগুলির উদাহরণ এখানে /etc/paths.d। মূলত আপনি প্রতিটি লাইন একটি মান রাখছেন।

 cat /etc/paths.d/Wireshark
/Applications/Wireshark.app/Contents/MacOS

রেফারেন্স:

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