আমার পরিবেশের পরিবর্তনশীলটি কোথায় রফতানি করা উচিত যাতে ব্যাশ / ড্যাশ, ইন্টারেক্টিভ / নন-ইন্টারেক্টিভ, লগইন / নন-লগইনের সমস্ত সংমিশ্রণগুলি এটি চয়ন করতে পারে?


11

প্রশ্নের উত্সাহ এখানে:

আমি ইউনিটি ডেস্কটপ সহ উবুন্টু 12.04 এলটিএস 2 ব্যবহার করছি। আমার .bashrc ফাইলে আমি আমার PATH ভেরিয়েবলের জন্য বেশ কয়েকটি ডিরেক্টরি সংযোজন করি এবং কয়েকটি পরিবেশের ভেরিয়েবল যেমন জাভাহোম হিসাবে সংজ্ঞায়িত করি। আমি যখন কোনও টার্মিনাল (চলমান ব্যাশ, আমার ডিফল্ট শেল) থেকে অ্যাপ্লিকেশনগুলি চালু করি, এটি দুর্দান্ত কাজ করে তবে ইউনিটি লঞ্চারটি ব্যবহার করে এমন বেশ কয়েকটি শর্টকাটের জন্য তারা এমন অ্যাপ্লিকেশন চালায় যা মনে হয় #! / Bin / sh ব্যবহার করার জন্য সংজ্ঞায়িত করা হয়েছে বলে মনে হচ্ছে / বিন / ড্যাশের সাথে যুক্ত হয় এবং তারা ~ / .bashrc বা ~ /। প্রোফাইলে হয় না pick

আমি মনে করি আমি এই সমস্ত শর্টকাটগুলিকে / বিন / শের পরিবর্তে / বিন / বাশ ব্যবহার করতে বাশার্ক পরিবর্তনগুলি বাছাই করতে বাধ্য করতে পারি, তবে এটি সত্যই হ্যাকিং বলে মনে হচ্ছে।

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

  1. যখনই আমি একটি লগইন না করা শ্যাশ তৈরি করি (একত্রে টার্মিনালটি ব্যবহার করে)
  2. আমি যখনই লগইন ব্যাশ শেল তৈরি করি (উদাহরণস্বরূপ, ssh এর মাধ্যমে দূরবর্তীভাবে লগইন করা)
  3. আমি যখনই কোনও ইউনিটি অ্যাপ্লিকেশন লঞ্চার ব্যবহার করি (প্রদত্ত যে লঞ্চটি / বিন / শ ব্যবহার করে)।
  4. যখনই কোনও ক্রোন জব এক্সিকিউট করে (শেল = / বিন / শ ইন / ইত্যাদি / ক্রন্টব এ দেওয়া হয়)।

আমি যদি সঠিকভাবে বুঝতে পারি তবে আমি অনুমান করছি:

  • (1) / (2) এবং (3) / (4) পৃথক কারণ (1) / (2) বাশ এবং (3) / (4) ড্যাশ।
  • (1) এবং (2) পৃথক কারণ ব্যাশ লোড করা ফাইলগুলি লগইন শেল কিনা তা নির্ভর করে পৃথক হয়।
  • (3) এবং (4) আলাদা কারণ কারণ (3) আমি লগইন করার পরে কিছুটা সময় আসবে (এবং তাই ~ /। প্রোফাইলটি তার প্যারেন্ট প্রসেসগুলির মধ্যে একটি দ্বারা উত্সাহিত করা হবে, যখন (4) কিছু আসবে আমি যখন লগইন না থাকি তা নির্দেশ করুন এবং তাই ~ /। প্রোফাইলটি পড়া হবে না।

(শেলটি ইন্টারেক্টিভ কিনা বা না হওয়ার মতো অন্যান্য বিষয়গুলিও যদি আমি বিবেচনা করি তবে আমি অবাক হব না, তাই সম্ভবত আরও সংমিশ্রণ রয়েছে যা আমি প্রত্যাশাও করি নি ... আমি আমার প্রশ্ন "উন্নত হতে পেরে খুশি) " এই ক্ষেত্রে.)

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

সমাধানগুলির সমাধান বা পয়েন্টারগুলি প্রশংসিত!

আপডেট করা হয়েছে:

  • স্পষ্টকরণ: এটি 12.04 ইনস্টলেশন প্রক্রিয়া দ্বারা নির্মিত ডিফল্ট উবুন্টু ব্যবহারকারী, তাই অভিনব কিছু নয়। এটা তোলে নেই আছে ~ / .profile (যে স্পষ্টভাবে সূত্র ~ / .bashrc), এবং শুধুমাত্র ~ / .bash * ফাইল উপস্থিত .bashrc, .bash_history এবং .bash_logout ... তাই কোনও কোনও .bash_profile এর হয়।
  • সুযোগ উপর জোর দেওয়া: আমি সত্যিই কোন ডিফল্ট ইন্টারেক্টিভ শেল (ব্যাশ) এবং কোন স্ক্রিপ্ট যে ব্যবহার / বিন / SH (ড্যাশ ওরফে অন্য) ঘটে ছাড়া অন্য শেল যত্ন সম্পর্কে না, তাই কিছু দিয়ে এই জটিল করার কোন প্রয়োজন নেই অতিরিক্ত জন্য tcsh শেল / ksh / zsh / ইত্যাদি। সমর্থন করি।

2
এটিকে একটি ফাইলে রাখুন তারপরে অন্য আরসি ফাইলগুলিকে এটি উত্স করতে দিন।
কনসোলবক্স

আমার এখানে থাকা ড্যাশ ম্যান পৃষ্ঠা অনুসারে এটি লগইন শেলগুলির জন্য OME হোম /। প্রোফাইল পড়তে হবে।
এটান রেইজনার

@ কনসোলবক্স কোন আরসি ফাইল? আফিক্স, ড্যাশের একটি আরসি ফাইল নেই। এবং যেমনটি আমি বলেছি, ড্যাশ ~ /। প্রোফাইলের সামগ্রীগুলি তুলে নিবে বলে মনে হয় না।

@ ইটানরাইজনার হ্যাঁ, এবং এটিই প্রশ্নটির মূল বিষয়। লগইন শেল হিসাবে যখন ড্যাশ চলমান না থাকে (এবং সুতরাং ~ /। প্রোফাইলে উত্সাহিত হয় না) তখন কী হবে?

@ মিকালোট আপনি কি ইন্টারেক্টিভভাবে ড্যাশ চালাচ্ছেন? যদি এটিতে -l বিকল্পটি যুক্ত করার চেষ্টা না করেন।
কনসোলবক্স

উত্তর:


9

শেল ডাকে একটি জটিল জিনিস। ব্যাশ এবং ড্যাশ ম্যান পৃষ্ঠাগুলির এ INVOCATIONসম্পর্কে বিভাগ রয়েছে ।

সংক্ষেপে তারা বলেছেন (ম্যান পৃষ্ঠায় আরও বিশদ রয়েছে, আপনার এটি পড়া উচিত):

When bash is                   | it reads
-------------------------------|----------
login shell                    | /etc/profile and then the first of ~/.bash_profile, ~/.bash_login or ~/.profile that exists.
                               |
interactive non-login shell    | /etc/bash.bashrc then ~/.bashrc
                               |
non-interactive shell          | The contents of $BASH_ENV (if it exists)
                               |
interactive (as "sh")          | The contents of $ENV (if it exists)

-

When dash is                   | it reads
-------------------------------|---------
login shell                    | /etc/profile then .profile
                               |
interactive shell              | The contents of ENV (it it exists, can be set in .profile as well as in initial environment)

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


দুঃখের বিষয়, এই সমস্যাটির কর্সটি হ'ল আপনার ড্যাশ টেবিল থেকে নিখোঁজ। যখন ইউনিটি ডেস্কটপ কোনও স্ক্রিপ্টের জন্য আবেদন করে যখন #! / Bin / sh দিয়ে শুরু হয়, এটি চালু করে (আমি যা অনুমান করি) একটি অ-লগইন, অ-ইন্টারেক্টিভ ড্যাশ শেল। কাজেই প্রশ্ন আসে সেই কিভাবে আমি একই এনভায়রনমেন্ট ভেরিয়েবল প্রাপ্তিসাধ্য করতে পারি সেখানে যে ম্যাট্রিক্স মধ্যে সর্বত্র অন্য উপস্থিত আছেন?

ঠিক। আমি কল্পনা করি সে কারণেই বাশ সেই স্লটের জন্য BASH_ENV যুক্ত করেছে। প্রদত্ত ড্যাশটিতে সেই স্লটে কাজ করে এমন কিছু আছে বলে মনে হচ্ছে না আমি নিশ্চিত নই যে আপনি ড্যাশ প্রবর্তনকারী অ্যাপ্লিকেশনটির পরিবেশের পরিবর্তনকে প্রভাবিত না করেই সমস্যাটি সমাধান করতে পারবেন (যেমন ড্যাশ এটি উত্তরাধিকার সূত্রে পেয়েছে)। এটির জন্য আপনার X পরিবেশে পরিবেশের ভেরিয়েবলগুলি সেট করা দরকার যা সেখানে @ মিকালোট থেকে .xsession (আরসি) মন্তব্য কার্যকর হয়। এটি এখনও ছেড়ে যায়, যেমনটি তিনি নির্দেশ করেছিলেন, চারটি আইটেম বাকি রয়েছে (তবে আমি বিশ্বাস করি এটি আসলে কিছুটা উদ্দেশ্যমূলক)।
এটান রেইজনার

যেহেতু আমি উবুন্টু 12.04 এলটিএসে আছি, ক্রোন আসলে পিক্সি-ক্রোন, তাই আমি আমার ক্রন্টব ফাইলটিতে এনভ ভেরিয়েবলগুলি সংজ্ঞায়িত করতে পারি ... আমি শেল = / বিন / বাশ এবং বিএএসএইচএনইভি = ~ / .brcrc এটি করা উচিত বলে অনুমান করছি?

3

সুতরাং, এই যোগাযোগ করার বিভিন্ন উপায় আছে। অনেক লোক হয়:

ক। এমন একটি ফাইল রয়েছে যা আপনার সমস্ত শ-শৈলীর শেলগুলির মধ্যে সাধারণ বিষয় রয়েছে, বলুন .shcommonএবং প্রতিটি .profile .bashrc .kshrcএ্যাট সিট্রাতে, কেবল এটির মাধ্যমে উত্স করুন. .shcommon

খ। .profileঅন্যান্য ফাইল থেকে এটিতে উত্স এবং উত্স দিন।

নির্দিষ্ট শেলগুলির জন্য বা ইন্টারেক্টিভ বনাম অ-ইন্টারেক্টিভ শেলগুলির জন্য প্রয়োজনীয় জিনিসগুলি সোর্সিংয়ের আগে উপযুক্ত ফাইলটিতে যেতে পারে .shcommon

ব্যক্তিগতভাবে, আমি একাধিক ফাইল পরিচালনা করা পছন্দ করি না। সুতরাং, আমি নিম্নলিখিত পদ্ধতির ব্যবহার:

প্রথমত, আমার যা কিছু প্রয়োজন তার মধ্যে .profile যেহেতু আমার কাছে কিছু বাশ এবং কেএসএস নির্দিষ্ট জিনিস রয়েছে তাই আমি নিম্নলিখিত শেল নামটি ব্যবহার করে নির্ধারণ করি:

# get name of current shell
# strip leading - from login shell
export SHELLNAME="${0#-}"

এবং তারপরে নীচের মতো কিছুতে নির্দিষ্ট শেলের জন্য কমান্ড রয়েছে (কিছু কেস স্টেটমেন্ট পছন্দ করবে)।

if [ "$SHELLNAME" = 'bash' ]
then
    shopt -s checkwinsize

elif [ "$SHELLNAME" = 'ksh' ]
then
    stty erase ^?
fi

যদি আমার কাছে এমন কমান্ড থাকে যা কেবলমাত্র ইন্টারেক্টিভ শেলগুলিতে চালিত হয় তবে আমি নিম্নলিখিতটি ব্যবহার করি:

# check for interactive flag i in shell options $-
# in bash and ksh you could use the following, but breaks in dash
# if [[ $- == *i* ]]
if [ "$(echo $- | grep i)" != "" ]
then
  fortune
fi

সমস্ত শ-শৈলীর শেলগুলিতে সাধারণ জিনিসগুলি যেমন PATHশীর্ষে যেতে পারে।

তারপরে, আমি সমস্ত শ-শৈলীর শাঁসে এই একই ফাইলটি লোড করতে আমি সিমলিংকগুলি ব্যবহার করি:

ln -s .profile .bashrc
ln -s .profile .kshrc

দু'পক্ষের নোট, যদি আপনার কাছে থাকে .bash_profileতবে ব্যাশ এটি পরিবর্তে লোড করবে .profileতবে ড্যাশ এবং কেএসএল এখনও লোড হবে .profile এটি আপনার সমস্যার অংশ হতে পারে।

এছাড়াও, আপনি যদি পসিক্সের সাথে সামঞ্জস্যপূর্ণ স্ক্রিপ্ট না চান তবে আপনি #!/bin/bashআপনার স্ক্রিপ্টগুলিতে ব্যবহারের পরিবর্তে বিবেচনা করতে চাইতে পারেন #!/bin/dash। ব্যাশের প্রচুর অতিরিক্ত বৈশিষ্ট্য রয়েছে যা খুব সুন্দর এবং ড্যাশ বা ব্যাশ হিসাবে ডাকা হয় এই বৈশিষ্ট্যগুলির মধ্যে অনেকগুলি অক্ষম করে।

এছাড়াও, ব্যাশ মানুষ হলে পৃষ্ঠাটি ব্যাখ্যা একটি ভাল পেশা আছে .profileবনাম .bashrcলোড পায়। অনুরূপ নিয়মগুলি ksh এ প্রযোজ্য। .profileলগইনে ড্যাশ লোড হয় এবং আপনাকে ইন্টারেক্টিভ শেলগুলির শুরুতে একটি ফাইল লোড করতে দেয় যা ENVএনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে নির্দিষ্ট করা হয় .profile(ড্যাশ ম্যান পৃষ্ঠাটিও পরীক্ষা করে দেখুন এবং প্রোফাইলে অনুসন্ধান করুন)।


আপনি কি শেল নামের জন্য কেবল $ 0 পরীক্ষা করতে পারবেন না? এমন শেল / কেস রয়েছে যেখানে কাজ করে না?
এটান রিজনার

একইভাবে, i ইন-এর জন্য পরীক্ষা করা - ইন্টারেক্টিভ শেল পরীক্ষার জন্য পর্যাপ্ত নয়? (এটি আমি প্রদত্ত কোনও মূল্য ছাড়াই ইন্টারেক্টিভ শেলগুলিতে ট্রিগার করবে তবে এটি অনাকাঙ্ক্ষিত পার্শ্ব-প্রতিক্রিয়া হতে পারে বা নাও হতে পারে))
এটান রিজনার

@ ইটান: এইচআরএম, আমি জানি যে আমি প্রথমে চেষ্টা করেছিলাম $0এবং সমস্যার মধ্যে পড়েছিলাম ... তারা ঠিক কী ছিল তা আমি মনে করতে পারি না। কনসোল মধ্যে সরাসরি লগিং প্রদর্শন করে $0যেমন -bashপরিবর্তে bashকিন্তু যে দূর করা সম্ভব।

@ ইটান: হ্যাঁ, আই-ইন পরীক্ষা $-করাও কাজ করবে। আমি আপনাকে যখন tty ছাড়া একটি ইন্টারেক্টিভ শেল থাকবে সম্পর্কে চিন্তা করতে হবে? আপনার সমাধানটির কোনও কারণে এটির জন্য আরও ভাল "অনুভূতি" রয়েছে, আমি এটি পরিবর্তন করতে পারি।

-মধ্যে -bashমানে হলো "লগ-ইন শেল" কিন্তু হ্যাঁ আপনি যে জন্য অ্যাকাউন্টে স্থান যেখানে আপনি মান পরীক্ষা অথবা তা প্রদর্শন করতে চান প্রয়োজন হবে।
এটান রেইজনার

0

যেহেতু মামলাগুলি (1) এবং (2) আমার পরিবেশের ভেরিয়েবলগুলিকে .bashrc এবং। প্রোফাইলে উত্সাহিত করে সমাধান করা হয়, তাই আসল প্রশ্নটি হল "ফাইলটির নাম কী যেখানে আমি (3) এবং (4) এর জন্য এই একই ভেরিয়েবলগুলি উত্স করি।

দেখে মনে হচ্ছে অকিউবুন্টুতে প্রশ্নের একটি অংশের (3) উত্তর রয়েছে (ইউনিটির ডেস্কটপে আমি কীভাবে পরিবেশের পরিবর্তনশীলটি আমদানি করতে পারি) । পরামর্শটি একটি ~ / .xsessionrc ফাইল তৈরি করতে হবে যা / ইত্যাদি / এক্স 11 / এক্সেসিওন দ্বারা উত্সাহিত হবে। (আমি এটি চেষ্টা করে দেখেছি এবং মনে হচ্ছে এটি কার্যকর ... হ্যাঁ!)

(4) এর জন্য কী করতে হবে তা নিয়ে আমি এখনও বিচলিত। অবশ্যই, যদি আমি ক্রোন জব তৈরি করি (বা ডেমন), আমি সঠিক পরিবেশের ভেরিয়েবলগুলি লোড করতে বাশ ব্যবহার করতে বাধ্য করার জন্য 'বাশ / আই / সি / বিন / ফু' জাতীয় কিছু দিয়ে '/ বিন / ফু' প্রতিস্থাপন করতে পারি, তবে এর অর্থ এটিও হ'ল আমাকে তৃতীয় পক্ষের কোনও সরঞ্জাম ব্যবহার করতে হবে যা ডিমন কার্যাদি বা ক্রোন জব আমার পক্ষে ইনস্টল করতে পারে। Yuk।

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