উবুন্টুর ডিফল্ট ~ /। প্রোফাইল ফাইল ~ / .bashrc কেন হয়?


30

এই স্টকটির সামগ্রীগুলি ~/.profileআমার 13.10 (মন্তব্য করা লাইনগুলি সরানো) এর সাথে এসেছে:

if [ -n "$BASH_VERSION" ]; then
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

এটি দেবিয়ান থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়েছে তবে কেনোনিকাল কেন এটি রাখার সিদ্ধান্ত নিয়েছিল? যতদূর আমি জানি, এটি আদর্শ * নিক্স উপায় নয় এবং আমি বিভিন্ন সিস্টেম দেখেছি যেখানে এটি ঘটেছিল না, তাই আমি ধরে নিই তাদের অবশ্যই কারণগুলির অবশ্যই কারণ আছে। লগইন শেলগুলি চালানোর সময় এটি অপ্রত্যাশিত আচরণের কারণ হতে পারে (যেমন উদাহরণস্বরূপ মেশিনে ঝাঁকুনির সময়) যেখানে ব্যবহারকারী ~/.bashrcউত্সাহিত হওয়ার আশা করবেন না ।

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

তাহলে উবুন্টু কেন এটি করে, আমি কী মিস করছি?


-n "$BASH_VERSION"বাশের বাইরে কেন সত্য হবে ?
এলিয়ট ফ্রিচ

@ এলিয়টফ্রিশচ এটি হবে না আমার প্রশ্নটি হ'ল .profileউত্সটি কেন .bashrc, সমস্ত লিনাক্স সংস্করণে এটি হয় না এবং আমি ভাবছি এর পিছনে যুক্তিটি কী।
টেরডন

ডেবিয়ান উজানের দিকে সেভাবে প্রয়োগ করা হবে বলে মনে হচ্ছে ।
এলিয়ট ফ্রিশ

@ এলিয়টফ্রিশ হ্যাঁ, আমি ভেবেছিলাম এটি তা নয় এবং এটি সন্ধান করে দেখেছি আমার মন্তব্য সম্পাদনা করার সময় এসেছে। তা সত্ত্বেও, এটি আমার কোনও সুস সিস্টেমে অ্যাক্সেস নেই (যদিও এটি সেন্টোস একের উপরে রয়েছে) এবং যতটা আমি স্মরণ করি বিভিন্ন সিস্টেমে (আরএইচ, ফেডোরাস, পুরানো উবুন্টাস) তেমন ঘটনা ছিল না। তাই আমি ভাবছি কেন।
টেরডন

উত্তর:


15

এটি দেবিয়ান থেকে আগত একটি প্রবাহ সিদ্ধান্ত। এটির পক্ষে যুক্তিটি এই খুব সুন্দর উইকির পোস্টে ব্যাখ্যা করা হয়েছে , যার মধ্যে নিম্নলিখিতটি একটি উদ্ধৃত অংশ। এক্সিকিউটিভ সংক্ষিপ্তসারটি হ'ল GUI এবং নন জিইউআই লগইনগুলি একইভাবে কাজ করে তা নিশ্চিত করা ":

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

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

তাহলে, এই সমস্যার সর্বোত্তম সমাধান কী? সত্যিই সর্বজনীন নেই। এর থেকে ভালো কিছু দেখার জন্য .xsession ফাইলটি সংশোধন করা আরও ভাল পদ্ধতির হয়:

[ -r /etc/profile ] && source /etc/profile
[ -r ~/.bash_profile ] && source ~/.bash_profile
xmodmap -e 'keysym Super_R = Multi_key'
xterm &
exec fluxbox

Xmodmap বা xterm চালানোর আগে বা উইন্ডো ম্যানেজারকে "চালিত" করার পূর্বে .xsession স্ক্রিপ্টটিকে / ইত্যাদি / প্রোফাইলে এবং .bash_profile পড়ার জন্য শেলটি তৈরি করে causes যাইহোক, এই পদ্ধতির সম্ভাব্য ত্রুটি রয়েছে: এক্সডিএম এর অধীনে .xsession পড়ার শেলটি কোনও নিয়ন্ত্রণকারী টার্মিনাল ছাড়াই চলে। যদি / etc / প্রোফাইল বা .bash_profile কোনও কমান্ড ব্যবহার করে যা কোনও টার্মিনালের উপস্থিতি অনুমান করে (যেমন "ভাগ্য" বা "স্টটি"), সেই আদেশগুলি ব্যর্থ হতে পারে। Xdm ডিফল্টরূপে এই ফাইলগুলি না পড়ার প্রাথমিক কারণ। আপনি যদি এই পদ্ধতির ব্যবহার করতে চলেছেন তবে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে কোনও টার্মিনাল নেই যখন আপনার "ডট ফাইল" এর সমস্ত কমান্ড চালানো নিরাপদ।


আমি এখনও মনে করি এটি দুর্দান্ত ধারণা নয়। আদর্শ একটিকে নিশ্চিত করা হবে যে ডিসপ্লে ম্যানেজারটি একটি বিশ্বব্যাপী প্রোফাইল (চেক) এবং ব্যবহারকারী শেলটি সরবরাহ করবে pr এখন আমি জানি কেন কিছু ভেরিয়েবলগুলিতে আমার নকল পথ রয়েছে ...
রোমানো

2

এটি উবুন্টুর মানক আচরণ, ~/.bashrcপ্রতি-ইন্টারেক্টিভ-শেল স্টার্ট আপ ফাইল হিসাবে ব্যবহারকারী স্তরের। আপনি যখন টার্মিনালটি খোলেন মূলত আপনি একটি অ-লগইন শুরু করেন, ইন্টারেক্টিভ শেল যা আপনার বর্তমান শেল পরিবেশে উত্সাহিত এবং রফতানি করার ~/.bashrcসামগ্রীগুলি ~/.bashrcপড়বে এবং সামগ্রীগুলি সরবরাহ করে। এটি একজনকে তার সমস্ত ব্যবহারকারীর বর্তমান শেলটিতে সংজ্ঞায়িত শেল ভেরিয়েবল এবং ফাংশন পেতে সহায়তা করে। এছাড়াও আপনি এই মত লাইন খুঁজে পেতে পারে

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi

প্রাপ্ত ব্যবহারকারী সংজ্ঞায়িত alias লেখা বর্তমান শেল পরিবেশে।

ভাল ব্যবহারকারীর অভিজ্ঞতা প্রদান করার জন্য এটি গুরুত্বপূর্ণ। উদাহরণস্বরুপ কোনো প্রক্সি ক্রেডেনশিয়াল সংরক্ষণ পারে .bashrc, যদি না তা টার্মিনাল অ্যাপ্লিকেশন কেউ sourced পেতে ( যেমন , ping, wget, curl, lynxইত্যাদি) সঠিকভাবে কাজ করবে। অথবা প্রতিবার আপনি টার্মিনালটি খুললে আপনাকে প্রক্সি শংসাপত্রগুলি সরবরাহ করতে হবে।

উবুন্টুর ডিফল্টটিতে .bashrcঅনেক ব্যবহারকারীর বন্ধুত্বপূর্ণ এলিয়াস রয়েছে ( বর্ণের আউটপুট প্রিন্ট করার জন্য lsএবং grepপ্রিন্ট করা), বিভিন্ন শেল ভেরিয়েবলের জন্য অনেকগুলি নতুন সংজ্ঞা যা ব্যবহারকারীর অভিজ্ঞতা বাড়িয়ে তোলে।

তবে আপনার ssh লগইন , বা ভার্চুয়াল কনসোলে লগইন করার ক্ষেত্রে , আপনি মূলত একটি ইন্টারেক্টিভ লগইন শেল পান। শেল দীক্ষা ফাইলটি সেখানে ~/.profile। সুতরাং যদি আপনি উত্স না করেন তবে আপনার নিজের ~/.bashrcমধ্যে সেই সমস্ত সহায়ক সেটিংস মিস করবেন .bashrc। এজন্য উবুন্টুর ডিফল্ট ~/.profileউত্স~/.bashrc

মামলা এড়াতে

  • থেকে উত্সাহিত করা হচ্ছে যখন একই সময়ে আপনি ~/.profileভিতরে ফর্ম উত্স করা উচিত নয় । এটি পরিস্থিতির একটি অসীম লুপ তৈরি করবে এবং ফলস্বরূপ আপনার টার্মিনাল প্রম্পটটি স্থগিত করা হবে যদি আপনি + টি আঘাত না করেন । এমন পরিস্থিতিতে যদি আপনার মধ্যে একটি লাইন রাখেন~/.bashrc~/.bashrc~/.profileCtrlC~/.bashrc
সেট -x

তারপরে আপনি দেখতে পেলেন যে আপনি যখন কোনও টার্মিনাল খুলবেন তখন ফাইল বর্ণনাকারী থামছে।


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

আপনার নামকরণ করা অন্যান্য লিনাক্স বিতরণগুলি আমি কঠোরভাবে ব্যবহার করি নি। তারা কীভাবে আমাকে বলতে পারেন যে তারা কীভাবে ssh সেশনে অ্যালাইজড কমান্ডগুলির মতো পরিস্থিতি পরিচালনা করে যা এর মধ্যে .bashrcবা এর মধ্যে সংজ্ঞায়িত করা হয়েছে .bash_aliases। উদাহরণ হিসেবে বলা যায় আমি উপনাম আছে lsযেমন ls --color=autoআমার .bashrcএবং আমার .bashrcআমার থেকে sourced পেয়েছিলাম .profile। এখানে আমি ssh থেকেও উপনামটি ব্যবহার করতে পারি। অথবা আমি ssh সেশনে প্রক্সি ব্যবহার করতে পারি। আমি যদি আমার .bashrcথেকে উত্স না .profileকরি তবে এই বৈশিষ্ট্যগুলি আলগা করুন। আমি মনে করি এটি সর্বোত্তম ব্যবহারকারীর অভিজ্ঞতা সম্পর্কে।
সোরাভ্যাক

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

আমি আপনার সাথে একমত. আমিও আগে কিছুটা সমস্যার মুখোমুখি হয়েছি । তবে এটি বেশিরভাগ সহায়ক এবং ব্যবহারকারী বান্ধব, যদি আপনি কিছু বিশেষ বিষয় মাথায় রাখেন এবং এড়িয়ে যান। এটি নয় :)
সুরভ্যাক

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