শেলের কমান্ডের আগে বিন্দুর অর্থ কী?


74

অ্যানড্রয়েড এক্সিলিপ ডিবাগ টিউটোরিয়াল অনুসরণ করার সময়, নিম্নলিখিত কমান্ডগুলির মুখোমুখি।

cd /path/to/android/root 
. build/envsetup.sh 
lunch 1    
make       
emulator

আমার সমস্যাটি ডট এর আগে কী build/envsetup.shবোঝায়?

উত্তর:


78

সেই প্রসঙ্গে একটি বিন্দুর অর্থ বর্তমান শেলটিতে সেই ফাইলের সামগ্রীগুলি "উত্স" করা। সঙ্গে sourceনিজেই একটি শেল builtin কমান্ড হচ্ছে। এবং sourceডট অপারেটর প্রতিশব্দ হচ্ছে।

উদাহরণ

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

$ cat sample.sh 
echo "hi"
echo "bye?"

এখন যখন আমি এটি উত্স:

$ . sample.sh 
hi
bye?
$

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

উদাহরণ

বলুন আমার কাছে এই কমান্ডগুলি অন্য একটি ফাইলে ছিল addvars.sh,।

$ cat addvars.sh 
export VAR1="some var1 string"
export VAR2="some var2 string"

লক্ষ্য করুন যে আমার আমার বর্তমান শেলের পরিবেশে কোনও পরিবর্তনশীল নেই।

$ env | grep VAR
$

এখন যখন আমি এই ফাইলটি উত্স করি:

$ . addvars.sh 
$

ঠিক আছে, দেখে মনে হচ্ছে এটি কিছু করেছে না, তবে আমরা যখন envআবার ভেরিয়েবলগুলি পরীক্ষা করি :

$ env | grep VAR
VAR1=some var1 string
VAR2=some var2 string

70

স্ল্যামের উত্তরে যুক্ত করতে:

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

উদাহরণস্বরূপ, বর্তমান ওয়ার্কিং ডিরেক্টরি (ফাইল সিস্টেমে অবস্থানের অবস্থানটি) প্রতি-প্রক্রিয়া ভিত্তিতে নির্ধারিত হয়। সুতরাং, এর মতো দেখতে একটি স্ক্রিপ্ট রাখি:

#!/bin/bash
cd ~
cd ..
pwd

সুতরাং, আসুন, এই স্ক্রিপ্টটি কল করুন ওহ foo,। এবং আসুন নিম্নলিখিত হিসাবে এই স্ক্রিপ্ট চালানো যাক:./foo

আমরা নিম্নলিখিত দেখতে পাবেন:

/home

(স্ট্যান্ডার্ড অস্বীকৃতি যে এখানে প্রচুর পরিমাণে লিনাক্স এবং অন্যান্য ইউএনআইএক্স ক্লোন বিতরণ রয়েছে, যার মধ্যে কিছু ব্যবহারকারীর ডিরেক্টরিতে অন্তর্ভুক্ত নয় /homeOr বা আমরা যেমন বলতাম "আপনার মাইলেজটি ভিন্ন হতে পারে")

এখন, এই স্ক্রিপ্টটি চালানোর পরে, এই কমান্ডটি টাইপ করুন

pwd

আমরা কোন ডিরেক্টরিতে আছি তা দেখতে আমরা এই জাতীয় কিছু দেখতে পাব:

/home/username

কারণ হ'ল, আমরা যে শেল স্ক্রিপ্টটি চালিয়েছিলাম তার নিজস্ব পরিবেশ ছিল (কমান্ডগুলি চালানো হচ্ছে তার নিজস্ব ডিরেক্টরি সহ), এবং স্ক্রিপ্টটি শেষ হয়ে গেলে সেই পরিবেশটি চলে যায়।

এখন, এর fooমতো স্ক্রিপ্টটি চালানো যাক

. ./foo

বা, সমতুল্য:

source ./foo

আমরা যদি এর pwdপরে কিছু করি তবে আমরা এটি দেখতে পাব:

/home

কারণ হ'ল: স্ক্রিপ্ট উত্সাহিত করা পৃথক প্রক্রিয়া কল করে না। এটি হ'ল প্যারেন্ট প্রসেসের সমস্ত কমান্ড টাইপ করার মতো; স্ক্রিপ্ট শেষ হওয়ার পরে এর পরিবেশ সংরক্ষণ করা হবে।


আমাকে একটি সহজ উদাহরণ হাজির করা যাক। এর মতো দেখতে একটি স্ক্রিপ্ট আসুন:

#!/bin/bash
exit

এর নাম দিন foo। নিশ্চিত আমরা এটা চালাতে পারেন করা যাক: chmod 755 foo। তারপরে, এর মতো এটি চালানো যাক:

./foo

কিছুই ঘটেনি. তবে, অন্যদিকে, আমরা যদি এটি করি:

. ./foo

অথবা এটা:

source ./foo

আমরা লগ আউট।


6
আপনার উত্তর গৃহীত উত্তরটির চেয়ে ভাল, আপনি কীভাবে ব্যাখ্যা করেছেন তা আমি বুঝতে পেরেছি, ধন্যবাদ!
আহমেদ

5

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


1

কীভাবে সন্ধান করবেন।

# type .
. is a shell builtin

# help .
.: . filename [arguments]
    Execute commands from a file in the current shell.

    Read and execute commands from FILENAME in the current shell.  The
    entries in $PATH are used to find the directory containing FILENAME.
    If any ARGUMENTS are supplied, they become the positional parameters
    when FILENAME is executed.

    Exit Status:
    Returns the status of the last command executed in FILENAME; fails if
    FILENAME cannot be read.

আমি মনে করি ম্যানুয়ালটিতে একটি কমা নেই।
এটিতে

1

। (উত্স বা ডট অপারেটর)
বর্তমান শেল প্রসঙ্গে ফাইলের যুক্তি থেকে কমান্ডগুলি পড়ুন এবং সম্পাদন করুন।

Syntax
      . filename [arguments]

      source filename [arguments]

উত্সটি বিন্দু / পিরিয়ড 'এর প্রতিশব্দ। ব্যাশে, তবে POSIX sh এ নয়, তাই সর্বোচ্চ সামঞ্জস্যের জন্য সময়কালটি ব্যবহার করুন।

যখন কোনও স্ক্রিপ্ট উত্স ব্যবহার করে চালিত হয় এটি বিদ্যমান শেলের মধ্যে চলে, স্ক্রিপ্ট দ্বারা তৈরি বা সংশোধিত যে কোনও ভেরিয়েবল স্ক্রিপ্ট সম্পূর্ণ হওয়ার পরে উপস্থিত থাকবে। বিপরীতে যদি স্ক্রিপ্টটি কেবল ফাইলের নাম হিসাবে চালানো হয়, তবে স্ক্রিপ্টটি চালানোর জন্য একটি পৃথক সাবશેল (সম্পূর্ণরূপে ভেরিয়েবলের সেট সহ) তৈরি করা হবে।

.Ss64script (dot ss64script) চালিয়ে কোনও স্ক্রিপ্ট কার্যকর করার মধ্যে একটি সূক্ষ্ম পার্থক্য রয়েছে। ss64script (ডট স্পেস ss64script)

প্রথমটি একটি ফাইল চালাচ্ছে যা 'ls' কমান্ড থেকে আড়াল হয়েছে, (যদিও ls -a লুকানো ফাইলগুলি দেখায়) দ্বিতীয় বিকল্পটি এসএমএসএসস্ক্রিপ্ট কার্যকর করবে যদিও এটি chmod এর সাথে নির্বাহযোগ্য হিসাবে সেট না করা থাকলেও।

উৎস


0

টি এল; ডিআর

বিন্দু সোর্স কমান্ডের সমান।

উত্স হ'ল একটি ইউনিক্স কমান্ড যা বর্তমান প্রসঙ্গে নির্বাহিত আদেশের তালিকা হিসাবে কমান্ডের পরে ফাইলটি মূল্যায়ন করে।

Https://en.wikedia.org/wiki/Source_( কমন্ড ) থেকে তোলা হয়েছে


2
U&L এ আপনাকে স্বাগতম! এই উত্তরটি এমন তথ্য নকল করে যা ইতিমধ্যে স্বীকৃত উত্তরে রয়েছে এবং সত্যই কিছু যুক্ত করে না।
জিগলিগা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.