.বাশার্ক, .প্রফিল, .বাশ_প্রোফাইল ইত্যাদির মধ্যে নির্বাচন করা [নকল]


197

এই প্রশ্নের ইতিমধ্যে এখানে একটি উত্তর আছে:

এই লজ্জাজনক, কিন্তু POSIX সিস্টেম পূর্ণ সময় ব্যবহার করার অনেক বছর পর, আমি এখনও figuring আউট একটি কঠিন সময় আছে যদি একটি শেল স্বনির্ধারণ মধ্যে যেতে হবে .bashrc, .profileঅন্য কোথাও, বা। ওএস-নির্দিষ্ট কিছু কনফিগার ফাইলের উল্লেখ না করা .pam_environment

হ্যাঁ, আমি কীভাবে ডকুমেন্টেশনের মাধ্যমে ধাঁধা দিতে এবং প্রতিটি ফাইল কখন লোড হয় না তা শিখতে পারি। আমি যেটা ভাবছি তা হ'ল যদি কেউ প্রত্যেকে একত্রে একটি নির্দিষ্ট ধরণের কাস্টমাইজেশন স্থাপন করে তবে কোন ফাইলটি স্থির করতে হয় তার জন্য বিস্তৃত গাইডলাইন থাকে।


6
এই প্রশ্নের সদৃশ হিসাবে চিহ্নিত করা উচিত নয় কারণ যোগ করা প্রশ্নে প্রোফাইলে উপলব্ধ নয়।
প্রেমরাজ

উত্তর:


222

টি এল; ডিআর:

  • ~/.bash_profileঅত্যন্ত-সহজ হওয়া উচিত এবং মাত্র লোড .profileএবং .bashrc(যাতে)

  • ~/.profileপরিবেশের ভেরিয়েবল ( PATHএবং বন্ধুরা) এর মতো ব্যাশের সাথে বিশেষভাবে সম্পর্কিত জিনিসগুলি নেই

  • ~/.bashrcএকটি ইন্টারেক্টিভ কমান্ড লাইনে আপনি চাইলে কিছু আছে। EDITORআমার ব্যবহারের জন্য কমান্ড প্রম্পট, ভেরিয়েবল, বাশ অ্যালিয়াস

কয়েকটি অন্যান্য নোট:

  • কিছু যে গ্রাফিক্যাল অ্যাপ্লিকেশন অথবা sh (বা bash যেন বরকত উপলব্ধ হওয়া উচিত sh) থাকতে হবে~/.profile

  • ~/.bashrc কিছু আউটপুট অবশ্যই না

  • লগইন শেলগুলির জন্য যে কোনও কিছু উপলভ্য হওয়া উচিত inোকা উচিত ~/.profile

  • ~/.bash_loginএটির অস্তিত্ব নেই তা নিশ্চিত করুন ।


3
+1, এটি ~/.profileজিডিএম / লাইটডিএম / এলএক্সডিএম এর মতো পরিষেবাগুলির জন্য সঠিকভাবে পরিবেশ নির্ধারণ করতে দেয় যা স্পষ্টভাবে / বিন / এসএস চালায়।
মাধ্যাকর্ষণ

12
আমার .bashrcআউটপুটগুলি বেশ প্রচুর স্টাফ করে, আপনি কি এই বিষয়ে মন্তব্য করতে পারেন? বিশেষত, আমি গ্রিটিং আউটপুটটি কোথায় রাখব?
Calimo

14
@ ক্যালিমো: এটি কেবল ইন্টারেক্টিভ মোডে আউটপুট স্টাফ করুন। আপনি এটির জন্য পরীক্ষা করতে পারেন [[ $- == *i* ]], অর্থাত্ বিশেষ $-আইটেমের মধ্যে 'i' সন্ধান করছেন । অবশ্যই, এটি কেবল সিস্টেমগুলিতে প্রথম স্থানে গুরুত্বপূর্ণ যেখানে ব্যাশটি .bashrcঅ-ইন্টারেক্টিভ মোডে পড়ার জন্য সংকলিত হয় । (অর্থাৎ ডেবিয়ান কিন্তু আর্চ হয়।) কিন্তু এটা যখন ব্যবহার সংযোগের চেষ্টা করার রহস্যময় ত্রুটি বার্তা একটি ঘন কারণ এর sftpবা scpবা অনুরূপ সরঞ্জাম।
মাধ্যাকর্ষণ

4
এখন আমার জানা দরকার- কেন_বাশ_লগিনের অস্তিত্ব থাকবে না? এটার কাজ কি?
tedder42

11
@ টেডার 42: এটি .bash_profileএবং হিসাবে একই কাজ করে .profile। তবে বাশ কেবল তিনটির মধ্যে প্রথমটি পড়ে। অর্থ, আপনার যদি একটি থাকে .bash_loginতবে উভয়ই .profileএবং .bash_profileরহস্যজনকভাবে উপেক্ষা করা হবে।
মাধ্যাকর্ষণ

54

গত কয়েক বছর ধরে, আমার নষ্ট করার জন্য অনেক সময় ছিল, তাই আমি এটি 10 ​​মিনিটেরও বেশি সময় নিয়ে গবেষণা করেছি । এটি সর্বোত্তম লেআউট হলে আমার কোনও ধারণা নেই, কেবলমাত্র এটিই ঘটে যা সমস্ত ক্ষেত্রে সঠিকভাবে কাজ করে।

প্রয়োজনীয়তা:

  • ~/.profile যে কোনও / বিন / শ এর সাথে সামঞ্জস্যপূর্ণ হতে হবে - এর মধ্যে ব্যাশ, ড্যাশ, কেএসএস অন্তর্ভুক্ত রয়েছে, যা কিছু ডিস্ট্রো ব্যবহার করতে পারে তা বেছে নিতে পারে।

  • এনভায়রনমেন্ট ভেরিয়েবলগুলি অবশ্যই এমন একটি ফাইলের মধ্যে রাখতে হবে যা কনসোল লগইন (অর্থাত্ একটি 'লগইন' শেল) এবং গ্রাফিকাল লগইন (যেমন জিডিএম, লাইটডিএম, বা এলএক্সডিএম এর মতো ডিসপ্লে ম্যানেজার) দ্বারা পঠিত হবে।

  • তার মধ্যে খুব সামান্য বিন্দু নেই উভয় ~/.profile এবং ~/.bash_profile। যদি পরবর্তীটি অনুপস্থিত থাকে তবে বাশ সুখে আগেরটি ব্যবহার করবে এবং কোনও বাশ-নির্দিষ্ট লাইনগুলি $BASHবা তার জন্য একটি চেকের সাহায্যে রক্ষা করা যেতে পারে $BASH_VERSION

  • *profileএবং এর মধ্যে পৃথকীকরণটি *rcহ'ল প্রাক্তনটি 'লগইন' শেলগুলির জন্য ব্যবহৃত হয় এবং পরবর্তীকালে আপনি যখন একবার টার্মিনাল উইন্ডোটি খোলেন। তবে, 'লগইন' মোডে ব্যাশ উত্স দেয় না ~/.bashrc, সুতরাং ~/.profileএটি ম্যানুয়ালি করা দরকার।

সবচেয়ে সহজ কনফিগারেশনটি হ'ল :

  • ~/.profileএমন একটি আছে যা সমস্ত পরিবেশের ভেরিয়েবল সেট করে (বাশ-নির্দিষ্ট ব্যতীত) সম্ভবত একটি বা দুটি লাইন মুদ্রণ করে, তবে সূত্রগুলি ~/.bashrcযদি ব্যাশ দ্বারা চালিত হয়, অন্যথায় sh- সামঞ্জস্যপূর্ণ বাক্য গঠনকে আঁকড়ে রাখে।

    TZ = "ইউরোপ / প্যারিস" রফতানি করুন
    EDITOR = "vim" রফতানি করুন
    যদি ["$ বাস"]; তারপর
        । ~ / .Bashrc
    ফাই
    আপটাইম
    
  • একটি আছে ~/.bashrcযে কোনো শেল-নির্দিষ্ট সেটআপ, জন্য একটি চেক দিয়ে পাহারায় সঞ্চালিত ইন্টারেক্টিভ মোডে ভালো জিনিস ভঙ্গ এড়াতে sftpডেবিয়ান উপর (যেখানে ব্যাশ বিকল্প কম্পাইল সেটি লোড হতে ~/.bashrcএমনকি নন-ইন্টারেক্টিভ শেল জন্য):

    [[$ - == * আমি *]] || ফিরে 0
    
    PS1 = '\ h \ w \ $'
    
    () {সুডো পরিষেবা "$ 1" শুরু করুন; }
    

যাইহোক, কিছু সমস্যা নেই যে কিছু অ-ইন্টারেক্টিভ কমান্ড (উদাঃ ssh <host> ls) এড়িয়ে যায় ~/.profileতবে পরিবেশের ভেরিয়েবলগুলি তাদের পক্ষে খুব কার্যকর হবে।

  • কিছু বিতরণ (উদাহরণস্বরূপ দেবিয়ান) তাদের বাশকে এই ~/.bashrcজাতীয় ইন্টারেক্টিভ লগইনগুলির উত্সের বিকল্পের সাথে সংকলন করে । এই ক্ষেত্রে, আমি পেয়েছি এটা দরকারী সব এনভায়রনমেন্ট ভেরিয়েবল (সরাতে export ...আলাদা ফাইলে লাইন), ~/.environএবং এ থেকেই উৎস উভয় .profile এবং .bashrcগার্ড সঙ্গে, এটা দুইবার করছেন এড়াতে:

    যদি! ["RE প্রিফিক্স"]; তারপর    # বা $ সম্পাদক বা $ টি জেড, অথবা ... 
        । viron / .en পরিবেশ            # সাধারণত কোনও পরিবর্তনশীল যা। পরিবেশ নিজেই সেট করে
    ফাই
    
  • দুর্ভাগ্যক্রমে, অন্যান্য বিতরণের জন্য (যেমন আর্চ), আমি খুব ভাল সমাধান পাইনি। একটি সম্ভাবনা হ'ল (ডিফল্টরূপে সক্ষম) পাম_এনভি পিএএম মডিউলটি নিম্নোক্তটিতে রেখে ~/.pam_environment:

    BASH_ENV =। /। এনভায়রনমেন্ট         # টাইপো নয়; এটি একটি পথ হওয়া দরকার, তবে work কাজ করবে না
    

    তারপরে অবশ্যই আপডেট ~/.environকরা হচ্ছে unset BASH_ENV


উপসংহার? শাঁস একটি ব্যথা হয়। পরিবেশের পরিবর্তনগুলি একটি ব্যথা। বিতরণ-নির্দিষ্ট সংকলন-সময় বিকল্পগুলি গাধাটির একটি প্রচুর ব্যথা।


2
শেষ অনুচ্ছেদের জন্য +1, তবে আমি স্যুরসিং .profileএবং .bashrcথেকে .bash_profileএবং .profileপরিষ্কার রাখা পছন্দ করি ।
nyuszika7h

@ নিউজিকা 7 আ: ধন্যবাদ, আমার .profile পরিষ্কার My
মাধ্যাকর্ষণ 11

1
মন্তব্যটি নোট করুন প্রতিবার আপনি উইন্ডো খুললে
মার্ক

1
"উভয়কেই রাখার খুব দরকার নেই ~/.profileএবং ~/.bash_profile": আমি অসম্মতি জানাই। কেন ড্যানের উত্তর দেখুন।
রুবেনবিবি

@ রুবেনভ আপনি কি প্রাসঙ্গিক অংশটি উদ্ধৃত করতে পারেন? আমি মনে করি এটি কেবলমাত্র একটি .profileএবং bashশর্তসাপেক্ষে নির্দিষ্ট অংশগুলি রক্ষা করা ভাল ।
কেলভিন

36

শ্রীভাতসার এর দুর্দান্ত ব্লগ পোস্টটি একবার দেখুন । এখানে একটি এক্সট্রাক্ট, তবে ব্লগ পোস্টে যান, এটিতে "লগইন শেল", একটি ফ্লো চার্ট এবং জেডএসের জন্য অনুরূপ টেবিলের মতো শর্তগুলির জন্য ব্যাখ্যা অন্তর্ভুক্ত রয়েছে।

বাশের জন্য, তারা নিম্নলিখিত হিসাবে কাজ করে। উপযুক্ত কলামটি পড়ুন। এ, তারপরে বি, তারপরে সি ইত্যাদি কার্যকর করে বি 1, বি 2, বি 3 এর অর্থ এটি খুঁজে পাওয়া ফাইলগুলির মধ্যে প্রথমটি কার্যকর করে।

+----------------+-----------+-----------+------+
|                |Interactive|Interactive|Script|
|                |login      |non-login  |      |
+----------------+-----------+-----------+------+
|/etc/profile    |   A       |           |      |
+----------------+-----------+-----------+------+
|/etc/bash.bashrc|           |    A      |      |
+----------------+-----------+-----------+------+
|~/.bashrc       |           |    B      |      |
+----------------+-----------+-----------+------+
|~/.bash_profile |   B1      |           |      |
+----------------+-----------+-----------+------+
|~/.bash_login   |   B2      |           |      |
+----------------+-----------+-----------+------+
|~/.profile      |   B3      |           |      |
+----------------+-----------+-----------+------+
|BASH_ENV        |           |           |  A   |
+----------------+-----------+-----------+------+
|                |           |           |      |
+----------------+-----------+-----------+------+
|                |           |           |      |
+----------------+-----------+-----------+------+
|~/.bash_logout  |    C      |           |      |
+----------------+-----------+-----------+------+

এটা সুন্দর. এটি লক্ষ্য করা গুরুত্বপূর্ণ যে সাধারণত /etc/profileকল করে /etc/bash.bashrcএবং ~/.profileকল করে ~.bashrc। কার্যকরভাবে, /etc/bash.bashrcএবং ~/.bashrcইন্টারেক্টিভ লগিনগুলির জন্যও কার্যকর করা হচ্ছে।
উইসবাকি

নোট করুন যে কিছু বিতরণগুলি এই স্কিমটিকে (অদ্ভুত পরিণতি সহ) ওভাররাইড করে বলে মনে হচ্ছে - উদাহরণস্বরূপ আমার বুগেরপোর্টটি এখানে খোলার জন্য দেখুন: bugzilla.opensuse.org/show_bug.cgi?id=1078124
খ্রিস্টান হেরেনজ

BTW। কমপক্ষে বাশ দিয়ে এই ফাইলগুলির /bin/sh
কোনওটিরই প্রয়োগ

@ জেপজেড আপনি ঠিক বলেছেন, এটিই তৃতীয় কলাম "স্ক্রিপ্ট" ব্যাখ্যা করে।
ফ্লিম

1
@ ফ্লিম ওয়েল, কলাম 'স্ক্রিপ্ট' বর্ণনা করে যখন আপনি বাশ (যেমন / বিন / বাশ) এর মাধ্যমে একটি ইন্টারঅ্যাক্টিভ স্ক্রিপ্ট শুরু করেন তখন কী হয় । তবে আপনি যদি sh এর মাধ্যমে একটি স্ক্রিপ্ট শুরু করেন (এবং / বিন / শ / / বিন / বাশকে একটি সিমলিংক) উপরের কোনওটি কার্যকর করা হয় না (এমনকি নয় BASH_ENV)। বাশ ম্যান পৃষ্ঠার সম্পর্কিত অনুচ্ছেদটি অনুসন্ধান করে পাওয়া যাবে If bash is invoked with the name sh
জেপিজেড

21

আমি আপনাকে আমার "বিস্তৃত" নির্দেশিকা অফার করছি:

  • উদাহরণস্বরূপ ব্যবহার করে এটি উপস্থিত থাকলে লোড .bash_profileএবং .profileলোড করুন.bashrc [ -r $HOME/.bashrc ] && source $HOME/.bashrc
  • অন্য সব কিছু .ুকিয়ে দিন .bashrc
  • উদ্বেজক বন্ধ.
  • প্রতি চার বছর বা তার পরে, ছেড়ে দেওয়ার আগে এবং "উদ্বেগজনক নয়" এ ফিরে যাওয়ার আগে এই প্রশ্নটি দশ মিনিট ব্যয় করুন।

সম্পাদনা: যদি কেউ বিশ্বাস করতে প্ররোচিত হয় তবে "বিস্তৃত" তে ভীতিজনক উদ্ধৃতি যুক্ত হয়েছে। ;)


3
উভয় থাকা .bash_profileএবং .profileকিছুটা অপ্রয়োজনীয়; আপনার কেবল পরেরটি দরকার। আপনার এটি / বিন / এস-প্রুফ তৈরি করতে হবে, যদিও: if [ "$BASH" ] && [ -r ~/.bashrc ]; then . ~/.bashrc; fiযেমন প্রোগ্রাম রয়েছে (যেমন জিডিএম / লাইটডিএম) যা একটি / বিন / শ স্ক্রিপ্ট থেকে ফাইলটিকে ম্যানুয়ালি উত্স করে দেয়। এর অর্থ হ'ল যে পরিবেশে রাখা পরিবেশটি .bashrcঅকার্যকর হবে। -1 করতে হবে, যেহেতু আপনার "বিস্তৃত" নির্দেশিকা অনেক সিস্টেমে কাজ করবে না, কারণ বেশ কয়েকবার হার্ড পথটি আমি খুঁজে পেয়েছি।
মাধ্যাকর্ষণ 6

কোনও সমস্যা নেই, আমি জবাব দিয়ে একটি উত্তর প্রদান করেছি যা কেবল জিভ-ইন-গাল নয় "বিস্তৃত", এবং আপনি অবশ্যই এই খেতাব অর্জন করেছেন।
যান্ত্রিক মাছ

0

আমি এটিকে বের করার চেষ্টা থেকে বিরত হয়েছি এবং একটি লিপি তৈরি ~/.shell-setupকরেছি ( ) যা আমি অন্য সবার থেকে উত্স করি।

এই পদ্ধতির ~/.shell-setupদুটি বৈশিষ্ট্য থাকা দরকার:

  1. বারবার উত্সাহিত হয়েও কেবল একবার চালনা করুন ( অন্তর্ভুক্ত রক্ষীদের ব্যবহার করুন )
  2. কোনও অযাচিত আউটপুট তৈরি করবেন না (আউটপুট ঠিক আছে তখন সনাক্ত করুন)

# 1 বেশ মানসম্পন্ন, যদিও শেল স্ক্রিপ্টগুলিতে সম্ভবত বেশি ব্যবহৃত হয় না।

# 2 টিস্ক্রিয়াল। ব্যাশে আমি যা ব্যবহার করি তা এখানে:

if [ "" == "$BASH_EXECUTION_STRING" -a "" == "$DESKTOP_SESSION" ]; then
    echo "Hello user!" # ... etc
fi

দুর্ভাগ্যক্রমে আমার মনে নেই আমি কীভাবে এটি সামনে এসেছি বা কেন একটি ইন্টারেক্টিভ শেল সনাক্ত করা যথেষ্ট ছিল না।


-2

সবকিছু রাখুন .bashrcএবং তারপর উৎস .bashrcথেকে.profile

বাশ ম্যান পৃষ্ঠা থেকে (ওএস এক্স ১০.৯-এ):

লগইন শেল নয় এমন একটি ইন্টারেক্টিভ শেলটি যখন শুরু হয়, তখন ফাইলটি উপস্থিত থাকলে ash / .bashrc থেকে আদেশগুলি পড়ে এবং কার্যকর করে। এটি --norc বিকল্প ব্যবহার করে বাধা দেওয়া হতে পারে। --Rcfile ফাইল অপশনটি বাশকে from / .bashrc এর পরিবর্তে ফাইল থেকে আদেশগুলি পড়তে এবং সম্পাদন করতে বাধ্য করবে

উপরের পাঠ্যটি কেন সমস্ত কিছু .োকানো হয় .bashrc। যাইহোক, আপনি লগইন শেল নিয়ে কাজ করার সময় কিছুটা আলাদা আচরণ আছে। আবার, ম্যান পৃষ্ঠা থেকে উদ্ধৃতি:

যখন বাশকে একটি ইন্টারেক্টিভ লগইন শেল হিসাবে, বা - লগিন বিকল্পের সাথে একটি অ-ইন্টারেক্টিভ শেল হিসাবে ডাকা হয়, এটি প্রথমে ফাইল / ইত্যাদি / প্রোফাইল থেকে কমান্ডগুলি পড়ে এবং কার্যকর করে, যদি সেই ফাইলটি বিদ্যমান থাকে। এই ফাইলটি পড়ার পরে, এটি সেই ক্রমে ash / .bash_profile, ~ / .bash_login, এবং ~ /। প্রোফাইলে অনুসন্ধান করে এবং উপস্থিত এবং পঠনযোগ্য যা প্রথমটি থেকে আদেশগুলি পড়ে এবং কার্যকর করে। শেলটি এই আচরণটি আটকাতে শুরু করা হলে --noprofile বিকল্পটি ব্যবহার করা যেতে পারে।

.profileলগইন শেল জন্য পড়া হয়, কিন্তু .bashrcহয় না। Stuff সমস্ত জিনিসটির অনুলিপি .bashrcকরা খারাপ ™ সুতরাং .profileআচরণটি ধারাবাহিকভাবে বজায় রাখার জন্য আমাদের এটি উত্সের প্রয়োজন ।

তবে আপনি নিঃশর্ত .bashrcথেকে উত্স নিতে চান না .profile। অতিরিক্ত বিবরণের জন্য দয়া করে মন্তব্য এবং অন্যান্য উত্তর দেখুন।


4
-1, থেকে উত্স না । @ ড্যানআরবিনোভিটসের উত্তর দেখুন। .bashrc.profile
nyuszika7h

কমপক্ষে নিঃশর্ত নয়।
nyuszika7h

[ -n "$BASH" -a -f ~/.bashrc ] && . ~/.bashrcএকটি মিষ্টি oneliner হবে .profile
জন ডাব্লু এইচ স্মিথ

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