কেবল বাশগুলি নয়, যে কোনও ধরণের স্ক্রিপ্ট ব্যবহার করার সময় এই একই প্রশ্নটি দেখা দিতে পারে। দোভাষী দ্বারা স্ক্রিপ্ট চালানো এবং এটি সরাসরি চালানোর মধ্যে কি প্রধান পার্থক্য রয়েছে?
লেটস ইউজ লিনাক্স (ইউএল) থেকে এই আকর্ষণীয় পোস্টে আমরা আরও একটি রহস্য প্রকাশ করব। |
যখন আপনি কোনও স্ক্রিপ্টের ফাইলের নাম কোনও দোভাষী (শ, পাইথন, পারল ইত্যাদি) এর কাছে দিয়ে চলেছেন, আপনি আসলে দোভাষীকে সম্পাদন করছেন, আপনি যে প্রোগ্রামটি আর্গুমেন্ট হিসাবে কার্যকর করতে চান তা পাস করছেন। উদাহরণস্বরূপ, আমরা এটিকে ভুল স্ক্রিপ্ট.শ যুক্তি দিয়ে পাস করে শ দোভাষী চালাই।
sh myscript.sh
যদি আপনি নিজে স্ক্রিপ্টটি চালান, সিস্টেমটি তার প্রয়োজন মতো ইন্টারপ্রিটারকে কল করবে এবং তারপরে, হ্যাঁ, এটি স্ক্রিপ্টটি কার্যকর করবে, এটি দোভাষীর পক্ষে যুক্তি হিসাবে প্রেরণ করবে, তবে সমস্ত স্বয়ংক্রিয়ভাবে এবং স্ক্রিপ্টটি ব্যবহারকারীর দ্বারা জানা না হয়ে।
./myscript.sh
নিজে স্ক্রিপ্ট চালানোর জন্য, 2 টি শর্ত পূরণ করতে হবে:
1) স্ক্রিপ্ট অবশ্যই একটি "ঠুং রেখা" অন্তর্ভুক্ত করা উচিত। এটি কোনও স্ক্রিপ্টের প্রথম লাইন, এটি অবশ্যই # টি অক্ষর দিয়ে শুরু হবে! এবং আপনাকে অবশ্যই সেই পথটি নির্দিষ্ট করতে হবে যেখানে দোভাষী পাওয়া যায়। এটি লক্ষ করা গুরুত্বপূর্ণ যে এই অবস্থাটি কেবল বাশ থেকে নয়, যে কোনও ধরণের স্ক্রিপ্টের জন্য (পাইথন, পার্ল ইত্যাদি) সত্য।
সুতরাং, উদাহরণস্বরূপ, আমাদের স্ক্রিপ্টে প্রথম লাইন হিসাবে নিম্নলিখিতটি থাকা উচিত:
#! / বিন / ব্যাশ
2) ফাইলটির অবশ্যই সম্পাদনের অনুমতি থাকতে হবে:
আমাদের স্ক্রিপ্টে মৃত্যুদন্ড কার্যকর করার অনুমতি দেওয়ার জন্য আমাদের অবশ্যই এটি লিখতে হবে:
chmod a + x miscript.sh
প্রস্তুত, এখন কেবল এটির মতো চালান:
./myscript.sh
অথবা স্ক্রিপ্টটি কোনও "বিশেষ" পথে অনুলিপি করে যা এটিকে সহজেই অনুরোধ করা যায়। উদাহরণস্বরূপ, আমরা এটিকে / usr / sbin এ অনুলিপি করতে পারি এবং এটি যেখানে রয়েছে সেখানে পুরো পাথ না রেখেই এটিকে যে কোনও জায়গা থেকে চালাতে পারি:
আমরা অনুলিপি:
sudo cp miscript.sh / usr / sbin / miscript
আমরা কার্যকর করি:
ভুল লেখা
আপনি দেখতে পাচ্ছেন, বাস্তবে পর্দার আড়ালে যা ঘটে তা উভয় ক্ষেত্রেই একই রকম। তবে, "ব্যাং লাইন" অন্তর্ভুক্ত করে আপনার স্ক্রিপ্টগুলি বিতরণ করা অনেক সহজ হবে, যেহেতু ব্যবহারকারীদের প্রয়োজনীয় দোভাষী তাদের কার্যকর করতে সক্ষম হওয়ার জন্য সেই পথটি মনে করতে হবে না। উপসংহার: এটি মূলত আরামের প্রশ্ন question
আমি আপনার সাথে এরপওয়ারের সাথে একমত, দোভাষী এবং এর পথ উভয়ই সংস্করণ পরিবর্তনশীল এবং ধ্রুবক নয়, আরও বেশি বিবেচনা করা হয় যে জিএনইউ / লিনাক্স বিতরণগুলি কেবল ব্যাশ ব্যবহার করে না (সেখানে আরও রয়েছে: freeBSD, ওপেনসোলারিস, ম্যাক) এবং অনেকগুলি তাদের মধ্যে বিভিন্ন কনফিগারেশন বা রুট রয়েছে।
গুরুত্বপূর্ণ বিষয়টি হ'ল জেনে রাখা উচিত যে আপনার কাছে স্ক্রিপ্টে কলটি বাজানোর জন্য নমনীয়তা রয়েছে (যেমন আপনি ভালভাবে উল্লেখ করেছেন) হয় / / অথবা sh (বা পাইথন ... ইত্যাদি) দিয়ে play
বাশ এমন একটি কম্পিউটার প্রোগ্রাম যা এর কাজটি অর্ডারগুলি ব্যাখ্যা করে।
এটি ইউনিক্স শেলের উপর ভিত্তি করে এবং পসিক্স অনুগত।
পরিবর্তে sh হ'ল একটি কম্পিউটার প্রোগ্রাম যা এর ক্রিয়াকলাপটি অর্ডারগুলি ব্যাখ্যা করে।
প্রক্রিয়া নিয়ন্ত্রণ, পুনঃনির্দেশের মতো বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে
ইনপুট / আউটপুট, ফাইল তালিকা এবং পড়া, সুরক্ষা,
দ্বারা প্রোগ্রাম এবং লেখার জন্য একটি কমান্ড ভাষা যোগাযোগ
ব্যাচ বা স্ক্রিপ্ট। এটি ইউনিক্সের প্রথম সংস্করণে ব্যবহৃত দোভাষী এবং এটি একটি ডি স্ট্যাক্ট স্ট্যান্ডার্ডে পরিণত হয়েছিল।
হ্যালো, আমি স্ক্রিপ্টগুলি ব্যবহারে শিক্ষানবিশ এবং আমি জানতে চাই যে আমার কোনও সমস্যা যদি কেউ আমাকে সহায়তা করতে পারে তবে:
আমি এমন একটি প্রোগ্রাম পরিচালনা করছি যা কনসোলের মাধ্যমে বেশ কয়েকটি প্রাথমিক ডেটা অন্তর্ভুক্ত করা প্রয়োজন এবং আমি জানতে পেরেছিলাম যে কোনও স্ক্রিপ্টের মাধ্যমে প্রাথমিক ডেটা দিয়ে প্রোগ্রামটি চালানো সম্ভব, যাতে যখন প্রোগ্রামটি চালানোর দরকার হয় তখন বারবার এটি লিখতে না হয়।
আমি কীভাবে এটি করতে জানি না, তাই কেউ যদি আমাকে এটির সাহায্য করতে পারে তবে আমি খুব কৃতজ্ঞ হব।
দেখুন, আপনি কোন প্রোগ্রামিং ভাষায় স্ক্রিপ্টটি লিখছেন তার উপর এটি নির্ভর করে। তবে যে কোনও ক্ষেত্রে আপনার যা প্রয়োজন তা হ'ল:
1) আপনি যদি চান যে যখনই স্ক্রিপ্টটি কার্যকর করা হয় তখন ব্যবহারকারীকে সেই তথ্যটি প্রবেশ করতে হয়, সর্বাধিক প্রচলিত পদ্ধতিটি কোনও চলকটির জন্য ইনপুটটিতে প্রবেশ করা মানগুলি গ্রহণ করা হয়।
2) মানগুলি সর্বদা একরকম হলে আপনি ধ্রুবক ব্যবহার করতে পারেন।
3) আরেকটি বিকল্প হ'ল সম্ভাবনা যা আপনার স্ক্রিপ্টটি প্যারামিটার নিতে পারে।
চিয়ার্স! পল।
আপনি যা উল্লেখ করেছেন তা আকর্ষণীয়। এটিকে 2 টি রূপের বলা হয়: শেবাং লাইন বা সরাসরি ব্যাং লাইন। আমি আপনাকে তথ্য দিচ্ছি: http://python.about.com/od/programmingglossary/g/defbangline.htm
চিয়ার্স! পল।
মজার বিষয়, আমি কখনই সেই বিশদটি নিয়ে ভাবতে থামিনি। কনসোলার পুনর্নির্মাণ সম্পর্কে আরও নিবন্ধগুলি দেখতে আকর্ষণীয় হবে, তাদের মধ্যে কেবলমাত্র সামঞ্জস্যতার জন্য এবং সিস্টেমের গতি উন্নত করার জন্য অযৌক্তিক কিলো কোড সরানোর জন্য বিখ্যাত কার্নেল রিকম্পিলেশন tion
ঠিক আছে. আমি এটা মনে রাখব.
চিয়ার্স! পল।
আমি আনন্দিত এটি কাজ করে। আমি সবসময় এমন জিনিস পোস্ট করার চেষ্টা করি যা আমার মনে হয় আকর্ষণীয় এবং ব্যবহারিক হতে পারে।
একটি আলিঙ্গন! পল।
ভাল অভ্যাস সহ প্রতিটি প্রোগ্রামার কোডের প্রথম লাইনে একটি "ব্যাং লাইন" যুক্ত করে। পাইথনে আমি কোডিং এবং ব্যাং লাইনটি কখনই ভুলি না forget
#! / usr / বিন / পাইথন 2.7
# *। * এনকোডিং = utf-8 *। *
দুর্দান্ত, আমি আশা করি আপনি কমান্ড লাইন সম্পর্কে আরও তথ্য প্রকাশ করতে পারবেন, বিশেষত যখন উত্স ফাইলগুলি (সংকলন ইত্যাদি) সংকলন বা ইনস্টল করার বিষয়টি আসে when
আমি কখনই "ব্যাং লাইন" শুনেছি না আমি এটি সর্বদা শেবাং নামে পরিচিত
http://en.wikipedia.org/wiki/Shebang_%28Unix%29
শুভেচ্ছা
আকর্ষণীয় নোট ... ধন্যবাদ!
কতটা আকর্ষণীয়, আমি প্রোগ্রামিং এবং স্ক্রিপ্ট সম্পর্কিত সমস্ত বিষয়ে নিজেকে পুরোপুরি অজ্ঞ বলে ঘোষণা করি, এটি কীভাবে কাজ করে তা সম্পর্কে আমার কোনও ধারণা ছিল না তবে আমি লক্ষ্য করেছি যে কারওর কাছে এটির শিরোনাম রয়েছে।
এই এন্ট্রিটির সাথে আমার যা ঘটেছিল তার একটি স্পষ্টতা: আমি একটি অ্যাডোব এয়ার গ্যাজেট ইনস্টল করতে চেয়েছিলাম (একটি পোকার বিজোড় ক্যালকুলেটর)। অ্যাডোব এয়ার ইনস্টলার যা করে তা হ'ল "সু" দিয়ে তবে ফর্মের সাথে সম্পর্কিত স্ক্রিপ্টটি চালানো / / আপনাকে মূল পাসওয়ার্ডের জন্য জিজ্ঞাসা করছি। যেহেতু স্ক্রিপ্টটিতে এক্সিকিউশন অনুমতি নেই, এটি অনুমতিটিকে অস্বীকার করেছিল, সমাধান: আপনি অনুমতিগুলি পরিবর্তন করতে না চাইলে sh দিয়ে স্ক্রিপ্টটি চালান (tmp chmod ফোল্ডারে যাওয়ার চেয়ে দ্রুত এবং সমস্ত কিছু)। স্ক্রিপ্টটি কার্যকর করা হয়, এটি অ্যাডোব ইনস্টলার এবং অন্য একটি প্রজাপতি জিনিসকে কল করে।
খুব আকর্ষণীয় নিবন্ধ! কনসোল সম্পর্কে আমাকে আরও কিছুটা জানার জন্য ধন্যবাদ Thanks দেখা যাক আপনি এই জাতীয় articles এর মতো নিবন্ধ প্রকাশনা চালিয়ে যান কিনা ^^
এটি চালিয়ে যান, এটি আমার প্রিয় ব্লগটি সন্দেহ ছাড়াই হয় !!
মনে রাখবেন যে দোভাষীর ব্যবহৃত সংস্করণগুলির মধ্যে পার্থক্য থাকতে পারে। স্ক্রিপ্টটি সরাসরি শেবাং অনুসারে চালানো দোভাষীর কোন সংস্করণ ব্যবহার করা উচিত তা নির্দেশ করার কোনও উপায় নেই, যা প্রয়োজনীয় হতে পারে। আপনি যদি এর পরিবর্তে দোভাষী চালান এবং স্ক্রিপ্টটিকে প্যারামিটার হিসাবে পাস করেন তবে আপনি জানেন যে এটির কোন সংস্করণ চলছে।
পাইথনের উদাহরণস্বরূপ, শেবাং যদি #! / Usr / bin / python2.4 হয় তবে প্রোগ্রামটি #! / Usr / bin / python2.6 এর চেয়ে আলাদাভাবে চলবে বা যদি এটি হয় #! / Usr / bin / python (এটি সাধারণত পাইথনের সংস্করণের প্রতীকী লিঙ্ক যা ডিফল্টরূপে ইনস্টল করা এবং কনফিগার করা আছে)। এটি ঘটে কারণ পাইথন ২.2.6 এর নতুন কার্যকারিতা রয়েছে যা পাইথন ২.৪-তে বিদ্যমান ছিল না, সুতরাং স্ক্রিপ্ট লিখলে সেই কার্যকারিতাটি একটি #! / Usr / bin / পাইথন শেবাং নির্দেশ করে ব্যর্থ হবে যদি সিস্টেমটি কেবল পাইথন ২.৪ ইনস্টলড থাকে। পরিবর্তে, আপনি স্ক্রিপ্টটি সর্বদা "পাইথন 2.4 /path/al/script.py" বা "পাইথন 2.4 /path/al/script.py/ দিয়ে শুরু করে আপনি যে পাইথনের সংস্করণটি চান তা চালিয়ে যেতে বাধ্য করতে পারেন /
শেল স্ক্রিপ্টগুলির জন্য, আপনি যে শেলগুলি ব্যবহার করেন তার মধ্যেও পার্থক্য রয়েছে, সুতরাং #! / বিন / শ এবং #! / বিন / ব্যাশের স্ক্রিপ্টের উপর নির্ভর করে বিভিন্ন ফলাফল হতে পারে। আপনি যদি কেবল ব্যাশে বিদ্যমান বৈশিষ্ট্যগুলি ব্যবহার করে কোনও স্ক্রিপ্ট লিখে থাকেন তবে একটি #! / বিন / শ শেবাং নির্দিষ্ট করে থাকেন, আপনার স্ক্রিপ্ট সম্ভবত লিনাক্সে কাজ করবে (বেশিরভাগ বিতরণে / বিন / শ ব্যাশের সাথে প্রতীকী লিঙ্ক) তবে এটি সম্ভবত ব্যর্থ হবে অন্যান্য ইউনিক্স যেখানে ব্যাশ ইনস্টল করা নেই বা যেখানে / বিন / শ / / বিন / ব্যাশের প্রতীকী লিঙ্ক নয়।
এছাড়াও বহনযোগ্যতার সাথে সম্পর্কিত, এটি অবশ্যই বিবেচনায় নেওয়া উচিত যে শেবাংয়ে নির্দেশিত পথটি নিখুঁত, এবং এমন সময় রয়েছে যখন অন্য জায়গায় দোভাষী সংযুক্ত থাকে। উদাহরণস্বরূপ, যদি আপনি আপনার বিতরণ থেকে কোনও প্যাকেজ ব্যবহার না করে পাইথন ডাউনলোড ও সংকলন করেন তবে / usr / লোকাল / বিন / পাইথনে পাইথন ইন্টারপ্রেটার ইনস্টল করা সাধারণ common আপনার শেবাং যদি #! / Usr / bin / পাইথন হয় তবে স্ক্রিপ্টটি সেই সিস্টেমে কাজ করবে না। এই সমস্যাগুলি এড়াতে চেষ্টা করার জন্য, আপনি শেবাং "#! / Usr / bin / env পাইথন" (বা "#! / Usr / bin / env sh") হিসাবে বর্ণিত হিসাবে ব্যবহার করতে পারেন http://en.wikipedia.org/wiki/Shebang_(Unix)#Portability
ধন্যবাদ জোনাথন! আপনি মন্তব্য দেখতে ভাল!
চিয়ার্স! পল।
আমি যা জানতে চাইছি তা কোথাও নেই, বা সার্চ ইঞ্জিনে কমপক্ষে কীভাবে এটি বাড়াতে হবে তা আমি জানি না, আমি একটি স্ক্রিপ্ট তৈরি করতে চাই যে কোনও কারণে xX কমান্ড প্রবণতা বা «su exec কার্যকর করে (এটি কেবল একটি উদাহরণ তবে এটি দুটি ক্ষেত্রে রয়েছে) আমি ভাবতে পারি) এবং প্রবণতার ক্ষেত্রে কখনও কখনও এটি আমাকে "ইয়োন" প্রবেশ করতে বলে বা "সু" -তে এটি আমাকে পাসওয়ার্ড জিজ্ঞাসা করে ... আমি স্ক্রিপ্টটি প্যারামিটারটি পাস করার সাথে সাথে এই বিকল্পগুলি স্বয়ংক্রিয়ভাবে নির্বাচন করতে চাই বা এমন কোনও পদ্ধতি ব্যবহার করে যা এটি জানে না ... । মনোযোগের জন্য ধন্যবাদ
হ্যালো আন্তোনিও! আপনার সমস্যাটি যদি পাসওয়ার্ডটি প্রবেশ করতেই থাকে তবে আমার কোনও সমাধান নেই বলে আমি মনে করি। স্পষ্টতই কারণ এটি একটি সুরক্ষা ব্যবস্থা, যাতে প্রত্যেকে কোনও প্রোগ্রাম ইনস্টল করতে না পারে।
প্রবণতা সম্পর্কে এবং হ্যাঁ করা আছে, আমি মনে করি এটি সমাধান করা যেতে পারে। আমি এই মুহুর্তে সঠিক পরামিতিটি ব্যবহার করার কথা মনে করি না, তবে কেবল ম্যান পৃষ্ঠাগুলিতে সন্ধান করুন। একটি টার্মিনাল খুলুন এবং কমান্ডটি সন্নিবেশ করুন: ম্যান প্রবণতা।
আলিঙ্গন! পল।
খুব ভাল পোস্ট।
আমি বিশেষত এই পোস্টে পছন্দ করেছি- যে প্রশ্ন / সন্দেহ উত্থাপিত হয় তার উত্তর খুব পরিষ্কার এবং সংক্ষিপ্তভাবে দেওয়া হয়।