কেন .bashrc এর পরিবর্তে রিমোট বাশ উত্স


24

বাশ ম্যানুয়াল বলেছেন:

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

এই বাশ উত্স ~/.bashrc:

ssh user@host :

তবে এই বাশ সূত্রগুলি ~/.bash_profile:

ssh user@host

আমি অনুমান অনুসারে এই দুটি কমান্ডের মধ্যে কোনও পার্থক্য দেখছি না। উভয় ক্ষেত্রেই স্টিডিন কোনও নেটওয়ার্ক সংযোগের সাথে সংযুক্ত নয়?


2
আপনি যা জিজ্ঞাসা করছেন তা না হলেও, আমি নোট করতে চাই যে এটি .bash_profile থেকে .bashrc উত্স হিসাবে ভাল অনুশীলন হিসাবে বিবেচিত । এইভাবে, ব্যাশটি লগইন শেল বা লগ-ইন শেল হিসাবে শুরু না করেই .bashrc থেকে সেটিংস প্রয়োগ করা হবে।
ইলমারি করোনেন

উত্তর:


44

একটি লগইন শেল প্রথমে পড়ে /etc/profileএবং তারপরে ~/.bash_profile

একটি অ-লগইন শেল /etc/bash.bashrcএবং এর পরে পড়ে ~/.bashrc

কেন এটি গুরুত্বপূর্ণ?

এই লাইনের কারণে man ssh:

যদি কমান্ডটি নির্দিষ্ট করা থাকে তবে এটি লগইন শেলের পরিবর্তে দূরবর্তী হোস্টে সম্পাদন করা হয়।

অন্য কথায়, যদি ssh কমান্ডের কেবল অপশন থাকে (কমান্ড নয়), যেমন:

ssh user@host

এটি একটি লগইন শেল শুরু করবে, একটি লগইন শেল পড়বে ~/.bash_profile

একটি ssh কমান্ডের একটি কমান্ড রয়েছে যেমন:

ssh user@host :

কমান্ডটি যেখানে :(বা কিছুই করবেন না)।
এটি কোনও লগইন শেল শুরু করবে না , তাই ~/.bashrcপড়তে হবে।


রিমোট স্টিডিন

রিমোট কম্পিউটারে / dev / stdin এর সরবরাহকৃত টিটিআই সংযোগটি প্রকৃত tty বা অন্য কিছু হতে পারে।

এর জন্য:

$ ssh sorontar@localhost
/etc/profile sourced

$ ls -la /dev/stdin
lrwxrwxrwx 1 root root 15 Dec 24 03:35 /dev/stdin -> /proc/self/fd/0

$ ls -la /proc/self/fd/0
lrwx------ 1 sorontar sorontar 64 Dec 24 19:34 /proc/self/fd/0 -> /dev/pts/3

$ ls -la /dev/pts/3
crw--w---- 1 sorontar tty 136, 3 Dec 24 19:35 /dev/pts/3

যা কোনও টিটিওয়াইতে শেষ হয় (কোনও নেটওয়ার্ক সংযোগ নয়) শুরু হওয়া বাশ এটি দেখায়।

কমান্ডের সাথে ssh সংযোগের জন্য:

$ ssh sorontar@localhost 'ls -la /dev/stdin'
sorontar@localhost's password: 
lrwxrwxrwx 1 root root 15 Dec 24 03:35 /dev/stdin -> /proc/self/fd/0

টিটিওয়াইয়ের তালিকাটি একই শুরু হয় তবে নোট করুন / ইত্যাদি / প্রোফাইল উত্সাহিত হয়নি।

$ ssh sorontar@localhost 'ls -la /proc/self/fd/0'
sorontar@localhost's password:
lr-x------ 1 sorontar sorontar 64 Dec 24 19:39 /proc/self/fd/0 -> pipe:[6579259]

যা শেলকে বলে যে সংযোগটি একটি পাইপ (কোনও নেটওয়ার্ক সংযোগ নয়)।

সুতরাং, উভয় পরীক্ষার ক্ষেত্রে, শেলটি জানতে সক্ষম হয় না যে সংযোগটি একটি নেটওয়ার্ক থেকে এবং সুতরাং এটি পড়তে পারে না ~/.bashrc(যদি আমরা কেবল কোনও নেটওয়ার্কের সাথে সংযোগ সম্পর্কে কথা বলি)। এটি ~ / .bashrc পড়তে পারে তবে ভিন্ন কারণে।


কোনও নো-আরগ কেসটি কোনও নেটওয়ার্ক সংযোগের সাথে সংযুক্ত স্ট্যান্ডার্ড ইনপুট দিয়ে চালিত হওয়ার যোগ্যতা অর্জন করবে না এবং এভাবে ~/.bashrcপড়েছে?
সাইকেল

@ সাইকার এটি ধরে নিচ্ছে যে শেলটি stdin একটি নেটওয়ার্কের সাথে সংযুক্ত থাকবে । কেন ধরে নিলেন? (উত্তর সম্পাদিত, দয়া করে পড়ুন)
sorontar

সম্পাদিত অংশটি আকর্ষণীয়। দেখে মনে হচ্ছে কেবল কমান্ড কার্যকর করার সময় ssh কোনও pty নিয়ে বিরক্ত করে না।
সাইকেল

8

আপনি "কেন" "কীভাবে" তা সম্পর্কে জিজ্ঞাসা করবেন, তাই আমি সেই দৃষ্টিকোণ থেকে উত্তর দেওয়ার চেষ্টা করব। অতীতে কী ঘটেছিল সেগুলি আজ কীভাবে ঘটে তার ফলশ্রুতিতে এর নীচের যুক্তিগুলির একটি ভাল চুক্তি হবে।


দুটি পৃথক স্টার্টআপ ফাইল ("প্রোফাইল" এবং "আরসি") থাকার কারণটি হ'ল অতীতে মেশিনে কাজ করার সাধারণ উপায় ছিল:

  1. একরকম রিয়েল টার্মিনাল বা অন্যান্য ওয়ার্কস্টেশন থেকে লগইন করুন এবং একটি লগইন শেল পান । এই শেল ডাকা হবে /etc/profileএবং ~/.profileএবং সেটআপ ব্যবহারকারীর জন্য পরিবেশ।

  2. ব্যবহারকারী যে পরিবেশটি প্রবেশ করতে চান তা চালান। এই পরিবেশটি জর্জি হতে পারে তবে বেশিরভাগ ক্ষেত্রে এটি জিএনইউ স্ক্রিনের মতো একাধিক প্লেয়ার ছিল।

  3. এনভায়রনমেন্ট (যেমন GNU স্ক্রিন) এর পরে অতিরিক্ত (লগ-ইন না করে) শেলগুলি চাওয়া হবে যা প্যারেন্ট লগইন শেল থেকে পরিবেশকে উত্তরাধিকারী।

সে সময় যখন সময় একটি ইউনিক্স মেশিনে লগ-ইন সাধারণ উপায় ছিল cshএবং bashবিকশিত হচ্ছে হয়। সুতরাং যাইহোক পরিবেশকে উত্তরাধিকারী করে দেওয়া শেলগুলিতে আবার পড়া অযথা~/.profile ভাবা হত।

bashতারপরে ~/.bashrcএই নন-লগইন শেলগুলির জন্য অতিরিক্ত কনফিগারেশনের জন্য যুক্ত করা হয়েছে। csh(এবং tcsh) লগ-ইন শেলগুলির জন্য কখনও কোনও ধরণের "আরসি" ফাইল যুক্ত করেনি। দ্রষ্টব্য যে csh/ tcshবোর্ন শেলটির সাথে সামঞ্জস্যপূর্ণ শেল নয় (যা পসিক্সের একটি অংশ) যদিও bash। আরেকটি বোর্ন সামঞ্জস্যপূর্ণ শেল, kshএকটি এনভায়রনমেন্ট ভেরিয়েবল (ডাকা ENV) যুক্ত করেছে, এটি যদি সংজ্ঞায়িত করা হয় তবে লগ-ইন না করার জন্য রান কমান্ড ("আরসি") ফাইল হিসাবে ব্যবহৃত হবে ksh

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

গ্রাফিকাল ডিসপ্লে ম্যানেজার (জিডিএম) উত্থাপনের সাথে "প্রোফাইল" ফাইল এবং "আরসি" ফাইলগুলির মধ্যে পার্থক্য অর্থহীন হয়ে পড়ে কারণ জিডিএমের নিজস্ব ইনিশিয়ালাইজেশন ফাইল (যেমন ~/.xinitএবং ~/.xsession) থাকবে। তারপরে, জিডিএম এর ভিতরে থেকে বলা শেলগুলি ব্যবহারকারীর স্বাদ অনুসারে লগইন বা নন-লগইন শেল হতে পারে এবং নন-লগইন শেলটির ক্ষেত্রে এমন একটি পিতা বা মাতা থাকে যে ক্ষেত্রে লগইন শেলটি আর সত্য নয়।

অতিরিক্ত

শেল স্টার্টআপ ফাইল তুলনা সম্পর্কে আমার পছন্দের একটি সারণী দেখায় যে বোর্ন শেল সুসংগত শেলগুলি profileঅন্য শেলগুলি না করে কীভাবে ফাইলগুলি ব্যবহার করে । এটি কারণ অতীতে প্রাথমিক শেলটি (যেটি ম্যাক্সারটি শুরু করেছিল) বোর্ন সামঞ্জস্যপূর্ণ শেল হওয়া দরকার।

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