.Bashrc এর উদ্দেশ্য কী এবং এটি কীভাবে কাজ করে?


উত্তর:


131

.bashrcইন্টারফেসটিভভাবে যখনই এটি শুরু হয় তখন বাশ চালিত একটি শেল স্ক্রিপ্ট । এটি একটি ইন্টারেক্টিভ শেল সেশনটি আরম্ভ করে। আপনি সেই ফাইলটিতে যে কোনও কমান্ড রাখতে পারেন যা আপনি কমান্ড প্রম্পটে টাইপ করতে পারেন।

আপনার নির্দিষ্ট পরিবেশে শেল সেট আপ করতে বা জিনিসগুলিকে আপনার পছন্দগুলিতে কাস্টমাইজ করতে আপনি এখানে কমান্ডগুলি রেখেছেন। একটি সাধারণ জিনিস রাখতে হবে যা আপনি সর্বদা উপলব্ধ থাকতে চান .bashrcএমন উপাধি

.bashrcউপর সঞ্চালিত হয় যে ইন্টারেক্টিভ শেল চালু করুন। যদি তুমি বল:

$ bash ; bash ; bash

এবং তারপরে Ctrl-Dতিনবার আঘাত করুন, তিনবার .bashrcচলবে। তবে আপনি যদি এটির পরিবর্তে বলেন:

$ bash -c exit ; bash -c exit ; bash -c exit

তবে .bashrcমোটেই চলবে না, যেহেতু -cবাশ কলটি অ-ইন্টারেক্টিভ করে। আপনি যখন কোনও ফাইল থেকে শেল স্ক্রিপ্টটি চালান তখন একই কথা সত্য।

বিপরীতে .bash_profileএবং .profileযা কেবলমাত্র একটি নতুন লগইন শেলের শুরুতে চালিত হয়। ( bash -l) আপনি একবার নির্বাচন করতে চান বা প্রতিটি ইন্টারেক্টিভ শেল শুরু করতে চান কিনা তার উপর নির্ভর করে কোনও কমান্ড .bashrcবনাম চলে কিনা তা আপনি চয়ন করেন .bash_profile

এলিয়াসগুলির একটি কাউন্টারেরেক্সাম হিসাবে, যা আমি রাখতে পছন্দ করি .bashrc, আপনি পরিবর্তে এটি PATHসামঞ্জস্য করতে চান .bash_profile, যেহেতু এই পরিবর্তনগুলি সাধারণত আদর্শহীন নয় :

export PATH="$PATH:/some/addition"

যদি আপনি .bashrcএটির পরিবর্তে রাখেন , প্রতিবার আপনি যখন একটি ইন্টারেক্টিভ সাব-শেল চালু করলেন, :/some/additionতখন PATHআবার শেষের দিকে টেক করা হবে , যখন আপনি কোনও কমান্ড ভুল টাইপ করবেন তখন শেলের জন্য অতিরিক্ত কাজ তৈরি করবে।

যখনই আপনি আপনার জন্য একটি নতুন ইন্টারেক্টিভ ব্যাশ শেল পেতে আউট শেলvi সঙ্গে :shউদাহরণস্বরূপ,।


6
মাইনর কুইবল: অন্যান্য শাঁসের বিপরীতে, ব্যাশ লগইন শেল হিসাবে শুরু হয়ে গেলে প্রতি-ইনস্ট্যান্ট কনফিগারেশন ফাইলটি স্বয়ংক্রিয়ভাবে লোড হয় না.bashrc । এটি কখনও কখনও অপ্রত্যাশিত আচরণের দিকে পরিচালিত করতে পারে । স্বাভাবিক কর্মসংস্থানটি উত্স .bashrcথেকে .profileবা এর .bash_profileপরিবর্তে হয় to
ইলমারি করোনেন

@ ইলমারি কারোনেন যেহেতু .bashrcঅন্যান্য শেলগুলি ব্যবহারের উদ্দেশ্যে নয়, তাই এটি থেকে উত্সাহিত না করাই ভাল .profile(যা অন্য bashশেলগুলি ব্যবহার করতে পারে )।
চ্যানার

@IlmariKaronen সেখানে কি ঘটছে (পড়া: কিভাবে আমি ডিবাগ করতে পারেন কেন) যখন source ~/.bashrcবা . ~/.bashrcবা [[ -f ~/.bashrc ]] && source. ~/.bashrcবা [ -f ~/.bashrc ] && source ~/.bashrcকাজ করে না?
নিকোস আলেকজান্দ্রিস

@ নিকোস অ্যালেক্সান্দ্রিস: এটি একটি পৃথক প্রশ্ন। এটি আলাদাভাবে জিজ্ঞাসা করুন ।
ওয়ারেন ইয়ং

@WarrenYoung আমি করব কিন্তু আমি বুঝলাম যে .bashrcপ্রকৃতপক্ষে sourced হয় (থেকে সুপারিশ করা কমান্ড ব্যবহার করে superuser.com/a/183980/128768 )। সমস্যা আমি মুখোমুখি আসলে না গুন হল https://github.com/junegunn/fzfএই কমান্ড ভিতরে মাধ্যমে .bashrc: source ~/.fzf.bash। আমি একটি নতুন টার্মিনাল চালু করি, তারপরে Ctrl+ Rএবং আমি পাই `__fzf_history__`bash: fzf: command not found। আমি নিজেই উত্স .bashrcউত্সর্পণ করেছি এবং একই কী শর্টকাটটি আশানুরূপে fzf প্রবর্তন করে। শোরগোলের জন্য এখানে দুঃখিত।
নিকস আলেকজান্দ্রিস

20

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

এটি প্রতিবার আপনি একটি নতুন টার্মিনাল, উইন্ডো বা ফলক খোলার মাধ্যমে পরিচালিত হয়ে কাজ করে।

আপনি এখানে আমার দেখতে পাবেন (সিনট্যাক্স হাইলাইটিংয়ের সাথে পিক করুন) :

HISTCONTROL=ignoreboth:erasedups HISTSIZE=100000 HISTFILESIZE=200000
ls --color=al > /dev/null 2>&1 && alias ls='ls -F --color=al' || alias ls='ls -G'
md () { [ $# = 1 ] && mkdir -p "$@" && cd "$@" || echo "Error - no directory passed!"; }
git_branch () { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'; }
HOST='\033[02;36m\]\h'; HOST=' '$HOST
TIME='\033[01;31m\]\t \033[01;32m\]'
LOCATION=' \033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH
PS2='\[\033[01;36m\]>'
set -o vi # vi at command line
export EDITOR=vim
test -f ~/.bash_aliases && . $_
test -f ~/.git-completion.bash && . $_
test -s ~/.autojump/etc/profile.d/autojump && . $_
[ ${BASH_VERSINFO[0]} -ge 4 ] && shopt -s autocd
[ -f /etc/bash_completion ] && ! shopt -oq posix && . /etc/bash_completion
[ -z $TMUX ] && export TERM=xterm-256color && exec tmux
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$home/.rvm/scripts/rvm"

ব্যাখ্যা:

-1। সদৃশ উপেক্ষা করতে এবং ডিফল্টের চেয়ে অনেক বড় হতে আমার ইতিহাস ফাইলটি সেট আপ করুন।
-2। lsআপনি লিনাক্স বা ওএসএক্স
-3 ব্যবহার করছেন কিনা তার উপর নির্ভর করে রঙ বিকল্প । " md" কমান্ড
-4 দিয়ে একটি ডিরেক্টরি তৈরি এবং সিডি করতে ফাংশন । গিট রেপো এবং ...
-5 এ থাকলে বর্তমান গিট শাখাটি সন্ধান করুন । -9। <কোড> 20:00:43 দূরবর্তী ক্যাসল ২০১২২ / হোম / ডুরান্টম / ড্রপনট / _ / রেল_অ্যাপস / লিঙ্কার মাস্টার \ n $ _ </code>
-১০ হিসাবে একটি দুর্দান্ত পিএস 1 প্রম্পটটি সংজ্ঞায়িত করুন । উন্নত PS2 প্রম্পট
-11। কমান্ড লাইন
-12 এ সম্পাদক হিসাবে vi সেট করুন । ডিফল্ট সম্পাদক হিসাবে vi সেট করুন
-13। আমার .bash_aliasesফাইল উপস্থিত থাকলে এটি
সম্পাদন করুন -14। আমার গিট ট্যাব সমাপ্তির স্ক্রিপ্ট (রিমোট এবং শাখাগুলির জন্য) উপস্থিত থাকলে তা কার্যকর করুন।
-15। অটোজাম্প বিদ্যমান থাকলে এটি চালনা করুন
-16। বাশ সংস্করণ> = 4 থাকলে সিডি অংশটি টাইপ না করে সিডিংয়ের অনুমতি দিন
-17। ব্যাশ সমাপ্তি স্ক্রিপ্টটি উপস্থিত থাকলে এটি প্রয়োগ করুন
-18। টিএমইউএক্স উপস্থিত থাকলে
-19। আমার পথ
-20 এ আরভিএম যুক্ত করুন । আরভিএম থাকলে তা ব্যবহার করুন।

আমি এই পোর্টেবল তৈরি করেছি যাতে এটি আমার কোনও লিনাক্স বা ওএসএক্স মেশিনে কাস্টমাইজেশন ছাড়াই কাজ করে - তাই উপস্থিত ফাংশন এবং অন্যান্য স্ক্রিপ্টগুলি ব্যবহারের আগে উপস্থিতির জন্য বেশ কয়েকটি পরীক্ষা করা হয়।

এটি নতুন টার্মিনাল উইন্ডোটি খোলার ক্ষেত্রে কোনও সমস্যা না থাকলেও নতুন ফাইলটিতে পুরো ফাইলটি তাত্ক্ষণিকভাবে ব্যবহার করা সহজ করে তোলে।


ওভারকিল ... ͏͏͏͏͏͏͏͏͏
পেসারিয়ার

তাই না? আপনার জন্য খুব সহায়ক?
মাইকেল ডুরান্ট

2
ভাগ করে নেওয়ার জন্য আপনাকে অনেক ধন্যবাদ. তথ্য প্রচুর।
ভিক

7

এটি একটি bashকনফিগার ফাইল।

ইন্টারেক্টিভ (অ-লগইন) শেলগুলি, তারপরে এই ফাইলগুলি থেকে কনফিগারেশনটি পড়ে:

  • $HOME/.bashrc

লগইন শেলগুলির জন্য, কনফিগারেশনটি এই ফাইলগুলি থেকে পড়ে:

  • /etc/profile (সর্বদা উত্সাহিত)
  • $HOME/.bash_profile (এই ফাইলগুলির বাকী ফাইলগুলি যাতে না পাওয়া পর্যন্ত যথাযথভাবে পরীক্ষা করা হয় তবে অন্য কোনওটি পড়া হয় না)
  • $HOME/.bash_login
  • $HOME/.profile

নীচের চিত্রটিতে কীভাবে / কখন সেগুলি বোঝানো হয় তার সাধারণ চিত্রণ।

আমি echoআমার .bashrcএবং.bash_profile

ইন্টারেক্টিভ শেল বনাম লগইন শেল

দেখতে man bashআরও তথ্যের জন্য


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

1
আমি নিশ্চিত নই যে আমি 'পুরানো প্রশ্নে' আপনার রেফারেন্সটি পুরোপুরি বুঝতে পেরেছি এটি শীর্ষ প্রশ্নের তালিকায় রয়েছে এবং এটি 60k মতামতের সাথে প্রাসঙ্গিক। আমি ভেবেছিলাম পূর্ববর্তী উত্তরগুলির মতো সংলাপ / অনুমানের বিপরীতে যুক্ত হওয়া মানটি ফর্ম্যাট থেকে এসেছে। তবে ফর্ম্যাটটিও সম্পাদিত হয়েছে। আমি কোড ব্লক ব্যবহার সম্পর্কে আপনার মতামত মাথায় রাখব, ধন্যবাদ।
টিমোথি এলজে স্টুয়ার্ট

2
এটি 'সক্রিয়' প্রশ্ন তালিকার শীর্ষে রয়েছে কারণ আপনি একটি উত্তর পোস্ট করেছেন। প্রশ্নটি মূলত ২০১৪ সালে জিজ্ঞাসা করা হয়েছিল, এবং একটি উত্তর গ্রহণ করেছিল। স্বীকৃত উত্তরটি তার উত্তরের উদ্দেশ্য উল্লেখ করে .bashrcএবং এর মধ্যকার পার্থক্যটি পৃথক করে .bashrcএবং .bash_profileযা আপনার উত্তরের বিষয়বস্তুটিকে কভার করে। নিরুৎসাহিত হবেন না, আপনি একটি সৎ প্রচেষ্টা চালিয়ে গেছেন, তবে অন্যান্য উত্তরের সাথে অন্তর্ভুক্ত নয় এমন কিছু বিষয়বস্তু দিয়ে প্রশ্নের উত্তর দেওয়ার দিকে মনোনিবেশ করার চেষ্টা করুন।
সেন্টিমানে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.