'ডট স্পেস ফাইলনাম' কমান্ড বাশে কী করছে?


30

বাশ শেল ব্যবহার করার সময় আমি কখনও কখনও পরিবেশের ভেরিয়েবলগুলি কোনও পাঠ্য ফাইলে রাখি যা আমি অনুলিপি করে। টেক্সট:

export FOO=bar
export FIZZ=buzz

কেউ আমাকে অনুলিপি / পেস্টের পরিবর্তে দেখিয়েছিলেন, আমি টার্মিনালে টাইপ করতে পারি

. exports.txt

যা অনুলিপি / পেস্টের মতো একই প্রভাব ফেলবে।

এই 'ডট স্পেস ফাইলনাম' কমান্ডটি কোন প্রক্রিয়াটি দ্বারা কাজ করে? এটির জন্য অনুসন্ধানের পদগুলি সম্পর্কে চিন্তা করা শক্ত।

আমি কী ঘটছে এবং এই ওয়ান-লাইনার কী করছে তার আরও সাধারণ বিবরণ আমি বুঝতে চাই।


23
রান help . এটি এত সংক্ষিপ্ত স্ট্যাক এক্সচেঞ্জ ইঞ্জিন মনে করে এটি মন্তব্য করা খুব ছোট।
ওয়াইল্ডকার্ড

5
আমি কেন এই সমস্ত প্রশ্ন এই সাইটে ঘটে তা অবাক। স্ট্যাক ওভারফ্লো , অ্যাস উবুন্টু এবং ইউনিক্স অ্যান্ড লিনাক্স এ তাদের বহুবার উত্তর দেওয়া হয়েছে ।
ফেডোরকুই

ডট-স্পেস চালানোর জন্য আপনাকে '. ' argsএকক বা ডাবল উদ্ধৃতি সহ টাইপ করতে হবে । অন্যথায় অকেজো স্থানটি টোকেনে লাইনটি পার্স করার সময় বাশ দ্বারা খেয়ে নেওয়া হয় (ব্যাশ ম্যানুয়ালটিতে "শব্দ বিভাজন" দেখুন)।
পিটার কর্ডস

1
ব্যাশে, একটি বিকল্প নাম .হ'ল sourceযার অর্থ আক্ষরিক অর্থে "এই ফাইলটি থেকে উত্স কমান্ড" অন্তত আমার কাছে।
jpaugh

উত্তর:


40

.( "ডট") কমান্ড জন্য একটি প্রতিশব্দ / শর্টকাট শেল এর বিল্ট-ইন sourceকমান্ড।

এটির ফলে শেল স্ক্রিপ্টটি বর্তমান শেল প্রসঙ্গে (সাবসেলের চেয়ে) পড়তে এবং কার্যকর করা হয়। এটি সোর্সড স্ক্রিপ্টটি কলিং শেলের পরিবেশ পরিবর্তন করতে সহায়তা করে, যেমন ভেরিয়েবল নির্ধারণ এবং শেল ফাংশন এবং উপকরণের সংজ্ঞা দেওয়া।


49
আসলে, POSIX- সংজ্ঞায়িত "ডট" ( ) কমান্ডের sourceজন্য একটি অ-মানক এবং বহনযোগ্য সমার্থক / শর্টকাট , অন্যভাবে নয়। .
টেরডন

8
বাশ একটি অ-মানক sourceএবং .নন-পসিক্স মোডে একটি মানহীন সরবরাহ করে, উভয়ই বর্তমান ডিরেক্টরিটি এটির অংশ না হলেও অনুসন্ধান করে $PATH। পসিক্স মোডে এটি একটি মান সরবরাহ করে .যা বর্তমান ডিরেক্টরিটি অনুসন্ধান করে না এবং নেই sourcesourceউভয়ই মোডে পসিক্সের .আদেশের সমার্থক নয় ।
এইচডিভি

26

যদিও দুটি বিদ্যমান উত্তর ইতিমধ্যে দুর্দান্ত, তবে আমি উদাহরণটি অনুভব করি যেখানে প্রভাবটি সবচেয়ে বেশি "লক্ষ্যণীয়" বলার অপেক্ষা রাখে না, অনুপস্থিত।

বলুন যে আমার কাছে script.shনিম্নলিখিত বিষয়বস্তু সহ একটি ফাইল রয়েছে:

cd dir

যদি আমি এই স্ক্রিপ্টটি সাধারণত চালিত করি ( sh script.sh), আমি এটি দেখতে পেতাম :

olle@OMK2-SERVER:~$ sh script.sh
olle@OMK2-SERVER:~$

তবে আমি যদি যেখানে স্ক্রিপ্টটি উত্স করব ( . script.sh), আমি এটি দিয়ে শেষ করব:

olle@OMK2-SERVER:~$ . script.sh
olle@OMK2-SERVER:~/dir$

লক্ষ্য করুন দ্বিতীয় ক্ষেত্রে কীভাবে আমাদের মূল শেলের কার্যকরী ডিরেক্টরি বদলেছে!

এর কারণ তার নিজস্ব subshell প্রথম উদাহরণ রান (অন্যান্য উত্তর সরু আউট হিসাবে) ( shপ্রক্রিয়া আমরা দিয়ে শুরু sh-command, এই মূলত হয়ে থাকতে পারে কোন শেল, bash, dash, আপনি এটির নাম), সেখানে ডিরেক্টরির পরিবর্তন, কিছুই করে না এবং বন্ধ করে দেয়। যদিও দ্বিতীয় উদাহরণটি আমাদের মূল শেলটিতে চলে এবং সেখানে ডিরেক্টরি পরিবর্তন করে!


4

এখানে একটি উদাহরণ।

স্ক্রিপ্ট ফাইল: mytest.sh

cat mytest.sh

#!/bin/bash

myvar=1
mystring="Hello World"

আপনি যদি উপরের যেকোন ভেরিয়েবল মুদ্রণের চেষ্টা করেন তবে কিছুই পাবেন না

echo $myvar

আপনি যদি না

. mytest.sh

অথবা

source mytest.sh

এবং তারপর

echo $myvar

এটি 1 মুদ্রণ করবে

স্পিফ কী লিখেছেন তার একটি দর্শনীয় উত্তর


সুতরাং আপনার উদাহরণটির ব্যাখ্যার অর্থ exportযদি সেই ভেরিয়েবলগুলি সাবশেলে ব্যবহার করা হয় তবেই ব্যবহার করা। exportভেরিয়েবলগুলি কেবলমাত্র বর্তমান শেলটিতে ব্যবহার করতে পারলে আমি ফাইলটিতে বাদ দিতে পারি । এটা কি সঠিক?
iancoleman

1
বেশ ডান এবং আমি হ্যাঁ বলতে পারে। তবে শেল এনভায়রনমেন্ট ভেরিয়েবল সম্পর্কে ভাবলে এক্সপোর্ট কমান্ডের ব্যবহার আরও কার্যকর বা আরও বোধগম্য। উদাহরণস্বরূপ $ হোম বা $ প্রদর্শন। হ্যাঁ আপনি আপনার শেল সেশন বা কোনও সাব-শেলের একটি পরিবর্তনশীল রফতানি করতে এক্সপোর্ট কমান্ডটি ব্যবহার করতে পারেন তবে আপনি এই সেশনটি শেষ করার সাথে সাথে এটি চলে যাবে।
21 ই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.