বাশ_প্রোফাইল বা বাশার্কে পরিবেশ পরিবর্তনশীল?


36

আমি এই প্রশ্নটি পেয়েছি [ব্লগ]: .Bashrc এবং .bash_profile এর মধ্যে পার্থক্য খুব দরকারী তবে সর্বাধিক ভোট দেওয়া উত্তর দেখার পরে (উপায় দ্বারা খুব ভাল) আমার আরও প্রশ্ন রয়েছে। সর্বাধিক ভোটগ্রহণ শেষে, সঠিক উত্তর আমি বিবৃতিটি নীচে দেখছি:

নোট করুন যে আপনি এখানে এবং সেখানে পরিবেশের পরিবর্তনশীল সংজ্ঞাগুলি ~ / .bashrc- এ রাখতে পারেন বা সর্বদা টার্মিনালে লগইন শেলগুলি চালু করতে পারেন। দুটোই খারাপ ধারণা।

  1. কেন এটি খারাপ ধারণা (আমি লড়াইয়ের চেষ্টা করছি না, আমি কেবল বুঝতে চাই)?

  2. যদি আমি একটি পরিবেশের পরিবর্তনশীল সেট করতে এবং এটি पथ (উদাহরণস্বরূপ জাভা_হোম) এ যুক্ত করতে চাই যেখানে রফতানির প্রবেশদ্বার স্থাপনের এটি সর্বোত্তম জায়গা হবে? মধ্যে ~ / .bash_profile বা ~ / .bashrc ?

  3. যদি 2 নম্বর প্রশ্নের উত্তর যদি ~ / .Bash_profile হয় তবে আমার আরও দুটি প্রশ্ন আছে:

    3.1। আপনি ~ / .bashrc এর আওতায় কী রাখবেন ? শুধু ডাকনাম?

    3.2। লগইনবিহীন শেলটিতে, আমি বিশ্বাস করি যে ~ / .Bash_profile "বাছাই করা" হচ্ছে না। তাহলে JAVA_HOME এন্ট্রির রপ্তানি bash_profile ছিল আমি চালানো সক্ষম হবে javac & জাভা কমান্ড? এটি কি তাদের পাথের সন্ধান করবে? কিছু কারণেই কি পোস্ট এবং ফোরামগুলি জাভাওয়াহোম সেট করার পরামর্শ দেয় এবং ike / .bashrc- তে একই হয় ?

    আগাম ধন্যবাদ.

উত্তর:


26

একটি আধুনিক সিস্টেমে এটি যে ক্ষেত্রে গুরুত্বপূর্ণ সেগুলি চালানো বিশেষভাবে সাধারণ নয়, তবে তা ঘটে। (বিশেষত, যদি আপনি শেল অপারেশন vimযেমন :r !commandবা ইন-লাইন !<motion>commandফর্ম ব্যবহার করেন তবে)

আপনি ~ / .bashrc এর আওতায় কী রাখবেন? শুধু ডাকনাম?

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

যদি আমি একটি পরিবেশের পরিবর্তনশীল সেট করতে এবং এটি पथ (উদাহরণস্বরূপ জাভা_হোম) এ যুক্ত করতে চাই যেখানে রফতানির প্রবেশদ্বার স্থাপনের এটি সর্বোত্তম জায়গা হবে? ~ / .bash_ প্রোফাইলে বা ~ / .bashrc এ?

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

লগইনবিহীন শেলটিতে, আমি বিশ্বাস করি যে ~ / .Bash_profile "বাছাই করা" হচ্ছে না।

এটি সঠিক; আপনি সাধারণত প্রাথমিক শেল একটি লগইন শেল এবং যে এক অধীনে শুরু কোন শেল হতে চান না লগইন হিসাবে শাঁস। প্রাথমিক শেলটি যদি লগইন শেল না হয় তবে আপনার ডিফল্ট PATHবা অন্যান্য বিভিন্ন সেটিংস (আপনার JAVA_HOMEউদাহরণ সহ ) থাকবে না।

বেশিরভাগ ডেস্কটপ এনভায়রনমেন্টগুলি ডিসপ্লে ম্যানেজার থেকে শুরু করা (যার অর্থ গ্রাফিকাল লগিনের সিংহভাগ) পুরো ডেস্কটপের জন্য একটি লগইন এনভায়রনমেন্ট সেট আপ করে না, তাই আপনাকে লগইন শেল হিসাবে টার্মিনালের প্রাথমিক শেলটি চালাতে বাধ্য করা হবে। এটি বেশ কয়েকটি সমস্যার সৃষ্টি করে (উল্লেখযোগ্যভাবে যে PATHপ্যানেলগুলি দ্বারা চালিত প্রোগ্রামগুলিতে এবং যেমন উপলব্ধ থাকে তা সঠিকভাবে সেট আপ করা হয় না, কারণ প্যানেলটি টার্মিনাল নয় এবং এটি চালিত হয় না ~/.bash_profile) তবে এটি সর্বদা সম্ভব নয় বলে একটি যুক্তিসঙ্গত সমঝোতা ~/.bash_profileডিসপ্লে ম্যানেজারের সামগ্রীগুলির উপর নির্ভর করে কোনও অধিবেশন শুরুর আগে অ-ইন্টারেক্টিভ পরিবেশে বুদ্ধিমানভাবে চালানো । কখনও কখনও এটিতে পরিবেশের সেটিংস স্থাপন করার পরামর্শ দেওয়া হয়~/.bashrcপরিবর্তে লগইন শেল কনফিগার করার পরিবর্তে; উপরের হিসাবে আলোচনা যতদিন পর্যন্ত এই কাজ আপনি যে পরিবেশ ওভাররাইড করতে প্রয়োজন হিসাবে না থাকে, এবং বিজোড় breakages ঘটায় একবার আপনি কি তাই করতে হবে।

আমি সম্প্রতি ওএস এক্স-তে এই জাতীয় সমস্যাটি নির্ণয় করতে সহায়তা করেছি যেখানে একজন ব্যবহারকারী যিনি ~/.bashrcপরে সেটিংস স্থাপন করেছিলেন পরে ব্যবহার শুরু করেছিলেন rvmএবং পার্লব্রুউ অদ্ভুত আচরণ দেখেছিলেন, কারণ দু'টি তৈরি করা পরিবেশগুলি ~/.bashrcসম্পাদকদের অভ্যন্তরে "পূর্বাবস্থায়" ছিল এবং sudoযা ওএস এক্স-এ রয়েছে লিনাক্সের বিপরীতে, ব্যবহারকারীর প্রচার করে $HOMEযাতে ~/.bashrcএগুলি রুট শেল দ্বারা চালিত হয়)। এই পরিবেশগুলি ব্যবহার করার চেষ্টা করার আগে কোনও সমস্যা হয়নি; এগুলি ব্যবহার শুরু করার সাথে সাথে তাদের সেটিংসের অপ্রত্যাশিত ক্ষয় দেখে তারা বিস্মিত হয়েছিল।


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

আপনি কেবল ব্যবহারকারী বা বিকাশকারী হোন তার চেয়ে এন্টারপ্রাইজ পরিবেশের সাথে এর কম সম্পর্ক রয়েছে; সিস্টেমগুলি বিকাশকারী সরঞ্জামগুলির মতো modulesএবং rvmযেমন "বিকাশকারী" এর কিছুটা আলাদা সংজ্ঞার জন্য মতলব এবং ক্যাডেন্স। সরল গঠন তাদের প্রয়োজন হয় না, কিন্তু যখন আপনি রুবি, পার্ল বা পাইথন একাধিক সংস্করণ বিরুদ্ধে পরীক্ষা করা প্রয়োজন তারপর আপনি সত্যিই কিছু মত চান rvm, perlbrewএবং virtualenvএটা সব সোজা রাখা (যথাক্রমে) সাহায্যের কাছাকাছি।
গাইকোসৌর

2

সত্যি কথা বলতে কি গুরু যা বলছিল তা সত্ত্বেও আজকাল কিছুটা পার্থক্য নেই।

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

আজকাল আমি মনে করি না যে পার্থক্যটি এখন কোনও গুরুত্বপূর্ণ। আমি মনে করি আজকাল যদি আপনি bashrc কে বাশ_প্রফাইলে উত্স করেন তবে কেউ আপনাকে দোষ দিতে পারে না।

মনে রাখবেন যে এটি ম্যাকোস এক্স-এ প্রযোজ্য নয় (প্রতিটি টার্মিনাল.এপ শুরু হওয়া একটি লগইন শেল)


আমি সম্পূর্ণরূপে বুঝতে পেরেছি তা নিশ্চিত নই, তবে কর্মক্ষেত্রে আমি যখন লগইন শেল হিসাবে এসএসএসের মাধ্যমে লগ ইন করি তখন বাশ_প্রোফাইল এবং বাশার্ক স্রোস হয়ে যায় তাই আমি অনুমান করি যে এই পরিস্থিতিতে এটি বিবেচ্য নয়। তবে আমি যদি গ্রাফিকভাবে লগ ইন করি (এর অর্থ কী)? আমার ব্যক্তিগত উবুন্টুতে লগইনের মতো?
ভিরিয়াটো

এখানে @ বুবু উত্তরের সাথে একমত হোন - যে কোনও সেটআপ যেখানে ~/.bash_profileউত্স ~/.bashrcনেই তার সাথে কাজ করা এবং ভাঙ্গা ভার্জিংয়ের চেয়ে কঠোর। গ্রাফিকাল টার্মিনাল অ্যাপ্লিকেশনগুলি বোঝায় এটি কেবল উত্স। / .Bashrc থেকে সহজ এবং সমস্ত কনফিগারেশন সেখানে রেখে দেওয়া।
রিচভেল

1

ওয়েল, "গ্রাফিকাল লগইনস" সম্পর্কে এটি নির্ভর করে যে আপনি * ডিএম ব্যবহার করেন ...

জিডিএম সহ (জিনোম ৩.১৮) আমার কাছে এটি রয়েছে:

জন্য / etc / gdm / Xsession

#!/bin/sh   <= *important*

...

# First read /etc/profile and .profile
test -f /etc/profile && . /etc/profile
test -f "$HOME/.profile" && . "$HOME/.profile"
# Second read /etc/xprofile and .xprofile for X specific setup
test -f /etc/xprofile && . /etc/xprofile
test -f "$HOME/.xprofile" && . "$HOME/.xprofile"

সুতরাং, ~ / .profile ব্যবহার করে লগইন মধ্যে sourced পরার / বিন / SH এবং / বিন / ব্যাশ

দুটি মামলা আছে

  1. / বিন / SH লিঙ্ক করা হয়েছে / বিন / ব্যাশ কিন্তু "POSIX / বোর্ন" মোডে রান
  2. / বিন / শ হ'ল / বিন / ড্যাশ (ডেবিয়ান / উবুন্টু)। দ্রুততম তবে কম বৈশিষ্ট্যযুক্ত (শেলশক সমর্থন;) )

সুতরাং / বিন / শ প্রোফাইলটি ~ /। প্রোফাইল এবং ~ / .বাশ_প্রোফাইল নয়, ~ / .zprofile

এই ফাইলটি "শেল অজোনস্টিক" সেটিংসের জন্য যেমন পথ এবং পরিবেশের ভেরিয়েবলগুলি ব্যবহার করা উচিত।

লগইন-কেবল ব্যবহারকারীর ইন্টারঅ্যাকশনের জন্য কোনও এক্সিকিউটেবল প্রোগ্রাম হওয়া উচিত এখানে নয় (মেল চেক, ভাগ্য ইত্যাদি ...)

~ /.* আরসি কেবলমাত্র "ইন্টারেক্টিভ" সেশনের জন্য বোঝানো হয় (উদাহরণস্বরূপ এলিয়াস ...)

ইন্টারেক্টিভ লগইন শেলগুলির জন্য বাশ এবং zsh এর মধ্যে পার্থক্য রয়েছে

কেবল বাশ উত্স .bash_profile, যখন zsh উত্স ক্রমে:

  1. ~ / .Zprofile
  2. ~ / .Zshrc
  3. inte / zlogin (এখানে inte / .zshrc এ সংজ্ঞায়িত উপকরণগুলি উপলভ্য। "ইন্টারেক্টিভ" + "লগইন" শেলসের ক্ষেত্রে

সঠিক পদ্ধতিতে b / .bash_ প্রোফাইলে এখানে উত্তর দেওয়া হয়েছিল:

.Bashrc এবং .bash_profile এর মধ্যে পার্থক্য

if [ -r ~/.profile ]; then . ~/.profile; fi
case "$-" in *i*) if [ -r ~/.bashrc ]; then . ~/.bashrc; fi;; esac

পরীক্ষা সক্ষম করতে (এবং প্রোফাইলিং), আপনি এটি ব্যবহার করতে পারেন

~ / .Bash_profile:

#!/bin/bash

# ------------------------------------------------
export _DOT_BASH_PROFILE_0=`date  --rfc-3339=ns`
# ------------------------------------------------

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

case "$-" in *i*) if [ -r ~/.bashrc ]; then . ~/.bashrc; fi;; esac

# ------------------------------------------------
export _DOT_BASH_PROFILE_1=`date  --rfc-3339=ns`
# ------------------------------------------------

~ / .Zprofile:

#!/bin/zsh

# ------------------------------------------------
export _DOT_ZSH_PROFILE_0=`date  --rfc-3339=ns`
# ------------------------------------------------

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

# no need to source, zsh already handle ~/.zshrc

###case "$-" in *i*) if [ -r ~/.zshrc ]; then . ~/.zshrc; fi;; esac

# ------------------------------------------------
export _DOT_ZSH_PROFILE_1=`date  --rfc-3339=ns`
# ------------------------------------------------

তারপরে, পরীক্ষা করতে:

chsh -s /bin/bash

ssh localhost
env

exit

ssh localhost env

ssh -t localhost bash -i -c env


chsh -s /bin/zsh

ssh localhost
env

exit

ssh localhost env

ssh -t localhost bash -i -c env

সুতরাং আরভিএম / ভার্চুয়ালেনভকে আইএমএইচও / pr / প্রোফাইলে যেতে হবে

কিন্তু এই না কাজ , কখনও কখনও ...

উদাহরণস্বরূপ, শেরে চলমান এক্সসিশনটি "আসল" বাশ (BASH_VERSION রফতানি করে) কেবল তখনই ভাইরাসুয়েলভ্রাপার কাজ করে

আপনি যদি কোনও ড্যাশ সিস্টেমে থাকেন তবে পরিবেশের পরিবর্তনশীল এবং পাথ সেটিংয়ের কাজ করে তবে ভাইরাসুয়েলভারপ্যাপার ফাংশন সংজ্ঞাটি কাজ করে না কারণ স্ক্রিপ্টটি পসিক্সের সাথে সামঞ্জস্যপূর্ণ নয়।

স্ক্রিপ্টটি কোনও ত্রুটি দেয় না তবে এটি কোনও "ওয়ার্কন" সংজ্ঞা ছাড়াই শেষ হয় ।

সুতরাং আপনি ক্লায়েন্ট থেকে সঠিক অজগর এক্সিকিউশন সক্ষম করতে এক্স / থেকে সরাসরি শুরু করে: পরিবেশকে হাতের মুঠোয় সেট করতে পারেন :

export VIRTUAL_ENV="/home/mike/var/virtualenvs/myvirtualenv"
export PATH="$VIRTUAL_ENV/bin:$PATH"
unset PYTHON_HOME

https://gist.github.com/datagrok/2199506

https://www.bountysource.com/issues/9061991-setting-up-your-computer-virtualenvwrapper-linux-all

তবে ভাইরুয়েলেনভ্রাপারের জন্য আপনার কাছে দুটি বিকল্প রয়েছে:

  1. উৎস এটা ~ / .bash_profile বা ~ / .zprofile (অথবা ~ / .zlogin) লগ-ইন শেল যখন টার্মিনাল কাজ
  2. script / .bashrc বা ash / zshrc এ স্ক্রিপ্ট অন্তর্ভুক্ত করুন

এর অর্থ X গ্রাহক (উদাহরণস্বরূপ emacs) গ্রাফিকালটি থেকে নয় টার্মিনাল শেল থেকে শুরু করা উচিত!

"আমি সন্তুষ্টি পেতে পারি না ..."


একটি সম্পূর্ণ ভিন্ন কাহিনী সিস্টেমযুক্ত সহ পরিষেবাদিগুলি পরিচালনা করছে কিছু সম্ভাব্য বিকল্প হ'ল : একটি মোড়ক স্ক্রিপ্ট লেখা, "পরিষেবা" সংজ্ঞা ফাইলে পরিবেশের সংজ্ঞা দেওয়া, প্যারেন্ট শেলটিতে উত্সাহিত করার জন্য পরিবেশকে একটি "এনভি" ফাইলটিতে ফেলে দেওয়া । জিনিসগুলি আরভিএম /
ভ্যাচুয়ালেনভ দিয়ে আরও জটিল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.