'ইকো $ 0' দুটি ভিন্ন টার্মিনালের জন্য আলাদা ফলাফল দেয় কেন?


15

আমি ব্যবহার উবুন্টু উপর একটি টার্মিনাল খুলে Ctrl+ + Alt+ + Tএবং একটি ডিরেক্টরিতে ডান ক্লিক যাচ্ছে এবং তারপর এবং "টার্মিনাল খুলুন" চয়ন করে একটি ভিন্ন টার্মিনাল।

আমি echo $0উভয় ক্ষেত্রে একটি করেছি ।

প্রথম ক্ষেত্রে:

$ echo $0
-bash

দ্বিতীয় ক্ষেত্রে:

$ echo $0
/bin/bash

কেন এই পার্থক্য?


$ 0 চলমান প্রক্রিয়াটির নাম দেয়।
রমেশ

আপনি কি আলাদা ব্যবহারকারীর সাথে দুটি টার্মিনাল চালাচ্ছেন?
cuonglm

আমি একই ব্যবহারকারীর ব্যবহার করছি
ব্লু

3
অনুরূপ প্রশ্ন জিজ্ঞাসাবাবু
অবিনাশ রাজ

এগুলি কি আসলে আলাদা টার্মিনাল এমুলেটর বা একই টার্মিনাল এমুলেটারের মাত্র দুটি উদাহরণ? তারা উভয়ই কি ডিফল্ট টার্মিনাল?
টেরডন

উত্তর:


16

echo $0কমান্ডের আউটপুট -bashহলে এর অর্থ bashলগইন শেল হিসাবে ব্যবহৃত হয়েছিল। যদি আউটপুটটি কেবলমাত্র হয় bashতবে আপনি অ লগইন শেলটিতে রয়েছেন ।

man bash 126 লাইনে কোথাও বলেছেন:

A  login shell is one whose first character of argument zero is a -, or 
one started with the --login option.

এখানে আরও দেখুন: লগইন শেল এবং নন-লগইন শেলের মধ্যে পার্থক্য?

এখন, আপনি কেন পাবেন তা ব্যাখ্যা করার জন্য /bin/bash দ্বিতীয় ক্ষেত্রে আসছেন তা বোঝাতে, আমি বলতে পারি যে কোনও প্রোগ্রাম (আপনার ক্ষেত্রে আপনার ফাইল ম্যানেজার, সম্ভবত নটিলাস) বা কোনও স্ক্রিপ্ট এর নিজস্ব $0কিছু অন্যরকম পরিবর্তন করতে পারে। উদাহরণস্বরূপ দেখুন $0আমার টার্মিনালটিতে কী ঘটছে (সর্বদা একই টার্মিনাল):

এখানে চিত্র বর্ণনা লিখুন


12

পার্থক্য হ'ল এগুলি শুরু করার পথে। বাশ আলাদাভাবে আরম্ভ করবে (বিভিন্ন প্রারম্ভিক স্ক্রিপ্টগুলি পড়বে) এর উপর নির্ভর করে এটি আরজিভি [0]। যদি স্ট্রিংটি হাইফেন দিয়ে শুরু -হয় -bashতবে এটি লগইন শেল হিসাবে চলবে, তা না হলে এটি একটি ইন্টারেক্টিভ শেল হিসাবে চলবে। এটি একটি অ-ইন্টারেক্টিভ শেল হিসাবে চালাতে পারে (যেমন শেল স্ক্রিপ্টে)।

আরও অনুসন্ধানের জন্য, ম্যানুয়ালটি, man bashইনভোকেশন বিভাগটি পড়া ভাল ।


9

আপনি যখন লগইন করেন তখন একটি শেল শুরু হয়, তবে এটি যেমন makeবা আপনি যখন শেল স্ক্রিপ্টটি চালাচ্ছেন বা টাইপ করার সময় প্রোগ্রাম দ্বারা শুরু হয়:sh করেন viবা যখন আপনি একটি নতুন টার্মিনাল উইন্ডো তৈরি করেন তখন ।

মূলত, আপনি ~/.profileযখন লগ ইন করেন বা দৌড়েন তখন শেলটি পড়বে su। এই স্ক্রিপ্টটি আপনার নতুন ইমেল রয়েছে কিনা তা ঘোষণা করার মতো কাজ করবে, নিজের মুছা কাস্টমাইজ করবে এবং অক্ষরগুলি মেরে ফেলবে এবং TERM এবং PATH ভেরিয়েবল সেট করবে এবং রফতানি করবে। প্রায় অন্য যে কোনও প্রসঙ্গে শুরু করা হলে, শেলটি পড়েনি ~/.profile, কারণ এই জিনিসগুলির বেশিরভাগটি করা অতিরিক্ত কাজ হবে। আপনি আশা করেছিলেন যে নতুন শেলটিতে কোনও গুরুত্বপূর্ণ শেল ভেরিয়েবল রফতানি হয়েছে।

শেলটি যেভাবে পড়তে পারে তা জানছিল যে ওরফে ~/.profileপ্রথম চরিত্রটি ছিল কিনা তা পরীক্ষা করা ।argv[0]$0'-'

দিয়ে শুরু করে csh, এলিয়াস চালু করা হয়েছিল। এলিয়াসগুলি পরিবেশে রফতানি করা হয়নি। cshদুটি পৃথক সূচনা স্ক্রিপ্টে পড়ার জন্য ডিজাইন করা হয়েছিল। ~/.loginকোনও ব্যবহারকারী যখন লগ ইন করেছিলেন কেবল তখনই পড়া হয়েছিল এবং এটি argv[0]শুরু করার সাথে সাথে কিউটি করা উচিত '-'~/.cshrcশেলটি শুরু হওয়ার পরে প্রতিবার পড়া হয়েছিল। সাধারণভাবে, একটিতে এলিয়াস স্থাপন করা হয় ~/.cshrcএবং সমস্ত কিছু ~/.logincshএছাড়াও সমর্থিত ~/.logout, যা বেশিরভাগ ক্ষেত্রে সবে স্ক্রিন সাফ করে দৌড়ে fortune

অন্যান্য শেলগুলি একই বৈশিষ্ট্যগুলি গ্রহণ করেছে। kshপড়তে পারে ~/.kshrc, bashপড়তে হবে ~/.bashrc, এবং আপনি যেখানে আপনার উরফ সংজ্ঞা স্থাপন করেছেন সেগুলি ছিল।

সুতরাং, একটি দীর্ঘ গল্প সংক্ষিপ্ত করতে, অ্যাপ্লিকেশনটি যে শেলটি আবিষ্কার করে এটি "লগইন শেল" হওয়া উচিত কিনা তা সিদ্ধান্ত নিতে পারে, সেই ক্ষেত্রে এটি আছে '-' এটি শুরুতে বা নিয়মিত শেল ছিল। বেশিরভাগ ক্ষেত্রে, একটি শেল যা ইন্টারেক্টিভ হতে চলেছে তা লগইন শেল হিসাবে শুরু হয়, এবং একটি শেলটি কেবলমাত্র কয়েকটি কমান্ড চালিত করতে পারে, হয় আর্গুমেন্ট হিসাবে বা স্ক্রিপ্ট থেকে, এবং তারপরে প্রস্থানটি নিয়মিত শেল হয়।

তবে শেলটি শুরু হওয়া অ্যাপ্লিকেশনের ঝাঁকুনির উপর নির্ভর করে এটি।

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