বাইনারি এবং স্ক্রিপ্ট কার্যকর করার বিভিন্ন উপায়


11

আমি কিছুদিন ধরে লিনাক্স ব্যবহার করছি এবং আমি এর একটি সম্পূর্ণ ওভারভিউ খুঁজছি কিন্তু কোনও পাইনি।

আমি কেবল স্ক্রিপ্টগুলি এবং বাইনারিগুলি কার্যকর করার বিভিন্ন পদ্ধতির সাথে সম্মতি জানাতে পারি না - এটি আমার পক্ষে সমস্ত বড় গন্ডগোল এবং আমার কী ব্যবহার করা উচিত তা নির্ধারণ করার জন্য আমাকে ট্রায়াল-অ্যান্ড-ত্রুটি ব্যবহার করতে হবে। স্ক্রিপ্ট বা বাইনারি এমন কোনও ফাইলের জন্য <script/binary>আমি নিম্নলিখিত বিকল্পগুলি নিয়ে আসতে পারি:

<script/binary>
. <script/binary>
./<script/binary>
source <script/binary>
sh <script/binary>

(আরও আছে?)

কোনটি কোন ধরণের ফাইলগুলির সাথে কোন আদেশগুলি কাজ করে তার একটি সম্পূর্ণ ওভারভিউ দিতে পারে এবং যখন একাধিক বিকল্প রয়েছে তখন তারতম্য কি?

ধন্যবাদ।

উত্তর:


7

নিম্নলিখিত কমান্ডগুলি সমান, একটি ডট উপাদানটির অর্থ "বর্তমান ডিরেক্টরি"। মৃত্যুদন্ড কার্যকর করার জন্য, ফাইলগুলিতে এক্সিকিউটেবল অনুমতি থাকা দরকার:

path/to/binary
./path/to/binary

মনে রাখবেন যে কোনও পথে যদি স্ল্যাশ না থাকে তবে এটি একটি কমান্ড হিসাবে বিবেচিত হবে (হয় শেল বিল্ট ইন বা একটি প্রোগ্রাম যা $PATHপরিবেশে পরিবর্তনশীল হিসাবে দেখা হয়)।

নিম্নলিখিতগুলি প্রায় একই, তারা বর্তমান শেল পরিবেশে একটি শেল স্ক্রিপ্ট (বাইনারি নয়!) চালায় । এই ইউনিক্স.এসই প্রশ্নে দুটি লাইনের মধ্যে একটি সামান্য পার্থক্য বর্ণিত হয়েছে ।

. path/to/script
source path/to/script

শেষ পর্যন্ত আপনি উল্লেখ করেছেন sh script। আবার, এটি কেবল শাইন স্ক্রিপ্টগুলির জন্য কাজ করে বাইনারিগুলির জন্য নয়। আপনি মূলত shস্ক্রিপ্টের নাম যুক্তি হিসাবে প্রোগ্রামটি চালাচ্ছেন। এর ক্ষেত্রে shএটি কেবল এই যুক্তিটিকে শেল স্ক্রিপ্ট হিসাবে বিবেচনা করে এবং এটি কার্যকর করে।

শেলস স্ক্রিপ্টগুলিতে সীমাবদ্ধ উত্তরগুলির জন্য, শেল স্ক্রিপ্টটি কার্যকর করার বিভিন্ন উপায় দেখুন ।


3

সমস্ত ইনপুট জন্য ধন্যবাদ। আমি এখন আমার নিজের প্রশ্নের উত্তর দেওয়ার চেষ্টা করব এবং স্ক্রিপ্ট এবং বাইনারিগুলি কার্যকর করতে বিভিন্ন সম্ভাবনার একটি সম্পূর্ণ গাইড সরবরাহ করব। দয়া করে সম্পাদনা করুন এবং মন্তব্য করুন এবং আমরা সম্পূর্ণ এবং সঠিক কিছু নিয়ে আসতে সক্ষম হব। আমার পরামর্শটি এখানে:

প্রথমে দুটি বিষয় উল্লেখ করতে হবে:

  • লিনাক্স একটি কমান্ড এবং একটি পথের মধ্যে পার্থক্য তৈরি করে । একটি কমান্ড কেবল প্রম্পটে যেমন-তে টাইপ করা থাকে, এবং এটি একটি অন্তর্নির্মিত সম্পাদন করে বা লিনাক্সকে b PATH- তে সম্পর্কিত বাইনারি বা স্ক্রিপ্ট সন্ধান করতে সহায়তা করে।

  • লিনাক্সকে কিছুকে পথ হিসাবে ব্যাখ্যা করার জন্য, এতে কমপক্ষে একটি স্ল্যাশ (/) থাকা দরকার contain উদাহরণস্বরূপ ./myScript, ./বেশ অপ্রয়োজনীয় মনে হতে পারে - এটি কেবল লিনাক্সকে কমান্ডের পরিবর্তে একটি পথ হিসাবে ব্যাখ্যা করার জন্য তৈরি করে।

সুতরাং, বাইনারি বা স্ক্রিপ্ট চালানোর জন্য বিকল্পগুলি:

বাইনারি কার্যকর করা binary:

$ binary          # when 'binary' is on the PATH, or is a built-in
$ ./binary        # when 'binary' is not on the path but in the current directory
$ /home/me/binary # when 'binary' is not on the PATH, and not in the current dir

একটি স্ক্রিপ্ট কার্যকর করা হচ্ছে script:

অন্যথায় না বললে ফাইলটির অনুমতি কার্যকর করতে হবে।

$ script        # execute a script that is on PATH. Will be executed in a new shell.
                # The interpreter to use is determined by the she-bang in the file.
$ ./script      # execute a script that is in the current dir. Otherwise as above.
$ /a/dir/script # when the script is not on the PATH and not in current dir. 
                # Otherwise as above.
$ . script      # execute a script in the current dir. Will be executed in the
                # current shell environment.
$ source script # equivalent to the above *1
$ sh script     # executes 'script' in a new shell *2 (the same goes for 'bash ...',
                # 'zsh ...' etc.). Execute permission not neccessary.

সে-ব্যাংস সম্পর্কে :

#!/bin/shপ্রথম লাইনে শে -ব্যাং (উদাহরণস্বরূপ ) সহ স্ক্রিপ্টগুলি কোন দোভাষীকে ব্যবহার করতে হবে তা বলে।

  • এই দোভাষীটি ./scriptএকটি কমান্ড দ্বারা কার্যকর করা বা ব্যবহার করার সময় ব্যবহার করা হবে : script( scriptঅবশ্যই PATH তে থাকতে হবে)
  • sh scriptব্যবহারটি শি-ব্যাংকে উপেক্ষা করবে এবং shদোভাষী হিসাবে এই ক্ষেত্রে ব্যবহার করবে
  • ব্যবহার . scriptবা sourceসে-ঠুং উপেক্ষা এবং বর্তমান অনুবাদক ব্যবহার (যেহেতু হবে .বা sourceবর্তমান শেল স্ক্রিপ্ট প্রতিটি লাইনে নির্বাহ সমতূল্য)

পাদটিকা

* 1: এটি কেবল প্রায় সত্য। ব্যাশে তারা আসলে একই কমান্ড, তবে ব্যবহারের পরে source, বর্তমান দিরের আগেscript AT PATH তে অনুসন্ধান করা হবে । এটি বাশ, তবে পসিক্স-শুধুমাত্র শেলগুলিতে কাজ করে না, তবে তা করে। বরং পরেরটি বহনযোগ্যতার জন্য ব্যবহার করুন।source.

* ২: আসলে যা ঘটে তা হ'ল আমরা 'স্ক্রিপ্ট' দিয়ে বাইনারি শকে আর্গুমেন্ট হিসাবে চালিত করি, যা এর নতুন শেলের মধ্যে 'sh' এক্সিকিউটিভ 'স্ক্রিপ্ট' তৈরি করবে


2

কমান্ডগুলির দ্রুত তালিকা দেওয়া হল। দ্রষ্টব্য, যখন আমি PATH উল্লেখ করি, তখন আমার অর্থ প্রোগ্রামগুলি সম্বলিত ডিরেক্টরিগুলি থাকে; আপনি তাদের সাথে খুঁজে পান echo $PATHএবং এটি এমন কিছু হবে:/home/mike/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

স্ক্রিপ্ট

  • বর্তমান ওয়ার্কিং ডিরেক্টরিতে একটি স্ক্রিপ্ট কার্যকর করতে, ব্যবহার করুন ./myscript.sh
  • অন্য কোনও ফাইলে স্ক্রিপ্ট কার্যকর করতে, ব্যবহার করুন (এটি যদি বর্তমান ওয়ার্কিং ডিরেক্টরিতে থাকে), ./myscript.sh textfile.txt
  • স্ক্রিপ্টগুলি যুক্তি দিয়েও চালানো যেতে পারে; যেমন ব্যাখ্যা Rute (P 68।): myfile.sh dogs cats birdsউইল আউটপুট The first argument is: dogs, second argument is: cats, third argument is: birdsকারণ কুঁড়েঘর পর এই স্ক্রিপ্টের বিষয়বস্তু:echo "The first argument is: $1, second argument is: $2, third argument is: $3"

  • অন্য ডিরেক্টরিতে একটি স্ক্রিপ্ট কার্যকর করতে, ব্যবহার করুন ~/Scripts/dogs.sh

  • আপনার হোম ডিরেক্টরি ডিরেক্টরিতে আপনার বিন ফোল্ডারে থাকার কারণে সিস্টেমটি জানে এমন কোনও স্ক্রিপ্ট কার্যকর করতে (এটি যদি সেখানে না থাকে তবে এটি তৈরি করুন, এটি স্বয়ংক্রিয়ভাবে আপনার প্যাথ-এ যুক্ত হবে), কেবল ব্যবহার করুন scriptname
  • আপনি যে স্ক্রিপ্টটি ইনস্টল করেছেন তা কার্যকর করতে, কেবল তার নামটি ব্যবহার করুন, কারণ এটি সিস্টেমে জানা থাকবে: উদাহরণস্বরূপ, get_iplayer

বাইনারি

  • সিস্টেমটি $ PATH- এ থাকার কারণে বাইনারি চালানোর জন্য, প্রোগ্রামটির নাম এবং কোনও পরামিতি ব্যবহার করুন, উদাহরণস্বরূপ, vlc <stream url to open>
  • বাইনারি পরীক্ষা করার জন্য আপনি / usr / স্থানীয় / বিন ইনস্টল করার আগে সংকলন করেছেন বা সিস্টেম থেকে দূরে একটি স্ট্যান্ডেলোন প্রোগ্রাম রাখতে ব্যবহার করুন ~/<folder>/app/myprog

তথ্যের জন্য ধন্যবাদ. এই বিবৃতিটি কি সঠিক: কোনও স্ক্রিপ্ট কার্যকর করতে বা PATH এ নয় বাইনারি কার্যকরভাবে তার পথ নির্দিষ্ট করে। বর্তমান পাথের স্ক্রিপ্টের জন্য ./ এর প্রয়োজনীয়তা হ'ল কেবল 'স্ক্রিপ্ট.শ' কম্যান্ড হিসাবে ব্যাখ্যা করা হবে কারণ এতে কমপক্ষে একটি স্ল্যাশ / নেই।
কার্ল

"আপনি ইনস্টল করা স্ক্রিপ্টটি কার্যকর করতে", আমি "ইনস্টল" করেছি এমন স্ক্রিপ্টটি কী? এই বিন্দুটি আগের বিন্দুর চেয়ে একই বলে?
কার্ল

@ কার্ল- আপনার প্রথম মন্তব্যটি সঠিক, তবে স্ক্রিপ্টগুলি সম্পর্কে আমার শেষ দুটি পয়েন্ট একই রকম বলা ঠিক হবে না। স্ক্রিপ্ট বিভাগের পঞ্চম পয়েন্টে আমি সেই স্ক্রিপ্টগুলির বিষয়ে কথা বলছিলাম যা ব্যবহারকারীর ম্যানুয়ালি তাদের হোম ডিরেক্টরিতে তাদের বিন ফোল্ডারে যুক্ত করেছে; point দফায় আমি get_iplayer এর মতো স্ক্রিপ্টগুলির বিষয়ে বলছিলাম যা তারা সংগ্রহস্থলগুলি থেকে ইনস্টল করে এবং যেমন সর্বদা সিস্টেম ফোল্ডারে যায় না ব্যবহারকারীর হোম ডিরেক্টরিতে।

দুঃখিত তবে আমি এখনও তা বুঝতে পারি না, script / bin / (যা PATH এ রয়েছে) বা একটি সিস্টেম ফোল্ডারে (যা PATH- এ রয়েছে) একটি স্ক্রিপ্ট - কীভাবে তাদের মধ্যে পার্থক্য থাকতে পারে? তারা কি অন্যরকম আচরণ করে?
কার্ল

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