.বাশার্ক / .বাশ_প্রফাইলে কেন কোনও শেবাং নেই?


22

সরল তদন্ত: আমি ঠিক বুঝতে পেরেছি যে আমি কোনও স্ক্রিপ্টের উপরে কখনও শেবাং দেখিনি .bashrc, যা আমাকে ভাবতে পরিচালিত করে যে এটি লগইন করার সময় সিস্টেমটি ডিফল্ট শেল ব্যবহার করে ( ${SHELL})। আমি কেন সেই কারণ নিয়ে চিন্তা করছি, অর্থাৎ লগইন স্ক্রিপ্টটি চালানোর জন্য ডিফল্ট শেল ছাড়া অন্য কিছু ব্যবহার করা খারাপ অভ্যাস হিসাবে বিবেচিত হয়?


1
এটিকে বাশ আরসি বলা হওয়ার একটি কারণ রয়েছে ...
আজেদি 32

উত্তর:


28

.bashrcএবং .bash_profileহয় না স্ক্রিপ্ট। এগুলি কনফিগারেশন ফাইল যা প্রতিবার উত্স হয়bash 2 টির মধ্যে একটিতে কার্যকর করা হয়:

  • ইন্টারেক্টিভ
  • লগইন

আবাহন ব্যাশ মানুষ পৃষ্ঠার অধ্যায় কী প্রাসঙ্গিক হয়।

একটি লগইন শেল এমন একটি যার আর্গুমেন্টের প্রথম অক্ষর a -, বা একটি দিয়ে শুরু হয়েছিল--login বিকল্প।

একটি ইন্টারেক্টিভ শেলটি অ-বিকল্প যুক্তি ছাড়াই এবং -cবিকল্প ব্যতীত যার স্ট্যান্ডার্ড ইনপুট এবং ত্রুটি উভয় টার্মিনালের সাথে সংযুক্ত থাকে (যেমন নির্ধারিত হিসাবে isatty(3)), বা -i বিকল্পটি দিয়ে শুরু করা হয়েছিল । পিএস 1 সেট করা হয়েছে এবং ইন্টারেক্টিভ থাকলে $-অন্তর্ভুক্ত iথাকলে bashশেল স্ক্রিপ্টকে অনুমতি দেয় এমনটিই একটি ইন্টারেক্টিভ শেল হয় started বা এই স্টেটটি পরীক্ষা করতে একটি স্টার্টআপ ফাইল।

নিম্নলিখিত অনুচ্ছেদে বর্ণনা করা হয়েছে যে কীভাবে bashএটির শুরু ফাইলগুলি কার্যকর করে। যদি ফাইলগুলির মধ্যে কোনও উপস্থিত থাকে তবে এটি পড়া যায় না, ব্যাশ একটি ত্রুটির কথা জানায়। টিলড চিহ্ন হিসাবে অধীনে নীচে বর্ণিত ফাইলের নাম মধ্যে প্রসারিত হয় টিল্ডা সম্প্রসারণ মধ্যে সম্প্রসারণ অধ্যায়।

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

যখন কোনও লগইন শেলটি প্রস্থান করে, বাশ ~/.bash_logoutউপস্থিত থাকে তা ফাইল থেকে আদেশগুলি পড়ে এবং সম্পাদন করে ।

লগইন শেল নয় এমন একটি ইন্টারেক্টিভ শেলটি যখন শুরু হয়, বাশ ~/.bashrcসেই ফাইলটি উপস্থিত থাকলে কমান্ডগুলি পড়ে এবং কার্যকর করে । --norcবিকল্পটি ব্যবহার করে এটি বাধা দেওয়া হতে পারে । --rcfile file বিকল্প পড়া এবং পরিবর্তে ফাইল থেকে কমান্ড চালানো ব্যাশ বাধ্য করা হবে ~/.bashrc

যখন তারা কমান্ড লাইন সুইচ মাধ্যমে লোড পেতে আপনি নিয়ন্ত্রণ করতে পারেন, --norcএবং --noprofile। আপনি যে জায়গাটি --rcfileস্যুইচটি ব্যবহার করে বোঝা হয়ে যায় সেখান থেকেও ওভাররাইড করতে পারেন।

যেমন অন্যরা উল্লেখ করেছে আপনি source <file>কমান্ড ব্যবহার করে বা এর ব্যবহারের মাধ্যমে এই ফাইলগুলি কীভাবে লোড হবে তা আপনি নকল করতে পারেন. <file>

নিম্নলিখিত হিসাবে এই কার্যকারিতা চিন্তা করা ভাল:

  1. খালি একটি খালি পরিবেশ দিয়ে শুরু হয়
  2. বাশ তারপরে এই ফাইলগুলির মধ্যে একটি খুলবে (এটি কীভাবে ইন্টারেক্টিভ বা লগইন হিসাবে ডাকা হয়েছিল তার উপর নির্ভর করে এবং ...
  3. ... লাইন লাইন ফাইলের মধ্যে প্রতিটি কমান্ড কার্যকর করে ...
  4. সম্পূর্ণ হওয়ার পরে ইনপুটটির জন্য অপেক্ষা করে প্রম্পটের আকারে নিয়ন্ত্রণ দেয়

আহ্বান করার পদ্ধতি

এই বিষয়টি প্রতি একবারে একবারে উপস্থিত হবে বলে মনে হয়, তাই অনুরোধ করার বিভিন্ন উপায় bashএবং এর ফলে কী ঘটেছিল তার জন্য এখানে একটি সামান্য চিটশিট দেওয়া আছে NOT দ্রষ্টব্য: "উত্সাহিত $ HOME / .Bashrc" এবং "উত্সযুক্ত" বার্তা যুক্ত করার জন্য আমি সাহায্য করতে চাই "নিজ নিজ ফাইলগুলিতে হোম / .bash_profile"।

বেসিক কল

  1. বাশ -i

    $ bash -i
    sourced /home/saml/.bashrc
  2. বাশ-এল

    $ bash -l
    sourced /home/saml/.bashrc
    sourced /home/saml/.bash_profile
  3. bash -il-or- bash -li

    $ bash -il
    sourced /home/saml/.bashrc
    sourced /home/saml/.bash_profile
  4. বাশ-সি "..সিএমডি .."

    $ bash -c 'echo hi'
    hi

    দ্রষ্টব্য: লক্ষ্য করুন যে -cস্যুইচটি কোনও ফাইলই উত্স করেনি!

কনফিগার ফাইলগুলি পড়া থেকে অক্ষম করা হচ্ছে

  1. bash --norc

    $ bash --norc
    bash-4.1$ 
  2. bash --noprofile

    $ bash --noprofile
    sourced /home/saml/.bashrc
  3. bash --norc -i

    $ bash --norc -i
    bash-4.1$ 
  4. bash --norc -l

    $ bash --norc -l
    sourced /home/saml/.bashrc
    sourced /home/saml/.bash_profile
  5. bash --noprofile -i

    $ bash --noprofile -i
    sourced /home/saml/.bashrc
  6. bash --noprofile -l

    $ bash --noprofile -l
    bash-4.1$ 
  7. bash --norc -i-or- bash --norc -l

    $ bash --norc -c 'echo hi'
    hi

ব্যাশ কল করার আরও রহস্যজনক উপায়

  1. bash --rcfile OME হোম / .bashrc

    $ bash -rcfile ~/.bashrc 
    sourced /home/saml/.bashrc
  2. bash --norc --rcfile OME HOME / .Bashrc

    $ bash --norc -rcfile ~/.bashrc 
    bash-4.1$ 

এগুলি ব্যর্থ হয়েছে

  1. bash -i -rcfile ~ / .bashrc

    $ bash -i -rcfile ~/.bashrc 
    sourced /home/saml/.bashrc
    sourced /home/saml/.bash_profile
    bash: /home/saml/.bashrc: restricted: cannot specify `/' in command names
  2. bash -i -rcfile .bashrc

    $ bash -i -rcfile .bashrc
    sourced /home/saml/.bashrc
    sourced /home/saml/.bash_profile
    bash: .bashrc: command not found

সম্ভবত আরও কিছু আছে তবে আপনি পয়েন্টটি পাবেন, আশা করি ...

আর কি?

অবশেষে যদি আপনি এই বিষয়টিতে এতই আকর্ষিত হন যে আপনি এটিতে আরও পড়তে / অন্বেষণ করতে চান তবে আমি বাশ বিগিনিয়ার্স গাইডটি বিশেষভাবে বিভাগ: 1.2 এ একবার দেখার পরামর্শ দিই বোর্ন অ্যাগেইন শেলের সুবিধা । এর অধীনে থাকা বিভিন্ন উপ- বিভাগগুলি , "১.২.২.১.২০১৮" "1.২.২.৩.৩. ইন্টারেক্টিভ শেল আচরণ" এর মাধ্যমে আপনি যেভাবে বিভিন্নভাবে ডাকতে পারেন তার মধ্যে নিম্ন স্তরের পার্থক্য ব্যাখ্যা করে bash


@ সাম্প্রদায়িক - দুঃখিত এটি কিছুটা হাতছাড়া হয়ে গেছে, আশা করি লোকেরা এর মানটির প্রশংসা করবে এবং ডাউনভোটদের সাথে শাস্তি দেবে না। এটির সাথে এখানে আমরা এখন রাস্তার নীচে অন্য উত্তরে এটি উল্লেখ করতে পারি। 8-)। আমি এটি দেখানোর জন্য একটি টেবিল তৈরি করার কথা ভাবছিলাম তবে এটি পাগল হয়ে যাবে 8-)।
slm

আসলে এগুলি পরীক্ষা করে দেখেছি? আমি একবার আমার বাশ
চেপে ধরার

@ বনাঙ্গুইন - এই কমান্ডগুলির প্রত্যেকটিই আমার দ্বারা চালিত হয়েছিল এবং এটিই আউটপুট যা কমান্ডের নীচে তৈরি হয়েছিল। আমার সেটআপ সহ একমাত্র সম্ভাব্য "জিনিস" হতে পারে আমার .bash_profileউত্সটি উত্সের জন্য একটি লাইন অন্তর্ভুক্ত .bashrc। তবে আমি বিশ্বাস করি যে সেটআপগুলি খুব সাধারণ হতে হবে।
slm

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

এই উত্তরটি এমনকি কোনো উত্তর বেশী ভালো এখানে stackoverflow.com/questions/415403/... !
জ্যাকব টমলিনসন

13

.bashrcস্ক্রিপ্টগুলি কেবল bashনিজেই চালিত হয় । তারা মুক্ত-স্থিতিশীল নয় এবং তারা execসিস্টেম দ্বারা উত্সাহিত করার উদ্দেশ্যে নয় । (আসলে, এগুলি সাধারণত সম্পাদনযোগ্য হিসাবে চিহ্নিত হয় না, এবং আপনি যেমন বলেছিলেন, তাদের কাছে শেবাং লাইন নেই))

এই ধরনের স্ক্রিপ্টগুলি sourceডি হিসাবে চিহ্নিত করা হয়, যেহেতু তারা সাধারণত পরিবেশ পরিবর্তনশীল ( $PATHযেমন উদাহরণস্বরূপ) এর মতো কাজ করে, যা স্ক্রিপ্ট শেষ হওয়ার পরেও বহাল থাকবে বলে আশা করা যায়। সুতরাং একটি সাব-শেলের মধ্যে একটি কার্যকর করার চেষ্টা করা অর্থহীন।


5

অন্যান্য জবাব ছাড়াও, নোট করুন যে আপনি যদি এটি চান তবে কোনও কিছুই আপনাকে এই কনফিগারেশন ফাইলগুলির শুরুতে একটি শেবাং রাখতে নিষেধ করে।

এতে তাদের শেল সোর্সিংয়ের ক্ষতি হবে না কারণ শেবাং কেবল একটি নিয়মিত মন্তব্যের মতোই প্রক্রিয়া করা হবে, যেমন উপেক্ষা করা হবে।

ফাইলগুলিতে প্রোগ্রামিং ভাষাটি কী ব্যবহৃত হয় তা নির্ধারণের জন্য সিন্ট্যাক্স হাইলাইট ব্যবহারকারী সম্পাদকদের সহায়তা করতে পারে।

মনে রাখবেন যে কিছু সম্পাদকরা vimপরবর্তীকালের জন্য মডেলিনগুলির মতো বিকল্প উপায় সরবরাহ করে। যেমন আপনি সর্বদা এর শেষে মোড লাইন স্থাপন করতে পারেন ~/.bashrcএবং এর ~/.bash_profileমতো:

...
<code in ~/.bashrc>
...
# vim: ft=sh :

1
উপরের @ এসএমএম থেকে গৃহীত উত্তরটি দুর্দান্ত, তবে .bash_profileশেলচেকের একটি প্রস্তাবনার ভিত্তিতে আমার শুরুতে একটি শেবাং যুক্ত করার বিষয়ে আমি এটিই খুঁজছিলাম।
jlucktay

1

আমি কোথাও এটি পড়েছি ঠিক কোথায় জানি না তবে এটি সত্য

এই অঞ্চলে বাশ ম্যানুয়ালটি কিছুটা বিভ্রান্তিকর, তবে বাশ শেল স্ক্রিপ্টের মতো X / .bash_ প্রোফাইলে এক্সেক্সট করে না। এটি ফাইলটি পড়ে এবং তারপরে কমান্ডগুলি কার্যকর করে (আপনি সোর্স। / .Bash_profile চালিয়ে অনুরূপ কিছু করতে পারেন)।

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