একটি বাশ স্ক্রিপ্ট সম্পাদনযোগ্য প্রোগ্রামক্রমে তৈরি করা


12

ড্রাইভ তৈরি করতে এবং মাউন্ট করার জন্য আমাকে বাশ স্ক্রিপ্ট তৈরি করতে হবে। সুতরাং, দুটি সহজ কমান্ড। কমান্ড লাইনে প্রবেশ করার সময় উভয়ই "কাজ" করে।

প্রতিটি সাধারণ ব্যবহারকারী লগইন করে স্ক্রিপ্টটি তৈরি ও সম্পাদিত হয়, সুতরাং এই স্ক্রিপ্টটি কার্যকর করা যায় এমন সময়ে আমার একটি পদ্ধতি প্রয়োজন। এখনও পর্যন্ত, আমি এটি কাজ করতে পারি না। উদাহরণস্বরূপ, প্রথম অংশটি mkdir /vvv/ggggএগিয়ে যায় নি কারণ স্ক্রিপ্টটি কার্যকরযোগ্য নয় (আমি অনুমান করছি)।

আশা করি এটি উপলব্ধিযোগ্য। এটা কি সম্ভব? এই কাজটি কীভাবে করা যায় সে সম্পর্কে কোনও ধারণার প্রশংসা করা হবে।

আপডেট :

আপনার প্রতিক্রিয়া জন্য ধন্যবাদ। আমার সম্ভবত লিনাক্সে নতুন than

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

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

আমি ভাবছি যেহেতু chmod +xস্ক্রিপ্টটিকে সম্পাদনযোগ্য করে তোলার জন্য প্রথমে আমার স্ক্রিপ্টের বিরুদ্ধে একটি সঞ্চালন করা দরকার , এ কারণেই এটি ব্যর্থ। যাইহোক, আলটিও একটি ক্রুট জেলে চলে। আমি একটি স্ক্রিপ্ট তৈরি করেছি, এটি সংরক্ষণ করেছি এবং স্ক্রিপ্টটি খুঁজে পাইনি। আমি ক্রুট জেলের ভিতরে এবং বাইরে উভয় দিকে অনুসন্ধান করেছি।

আমি প্রাথমিক স্ক্রিপ্টের অন্য স্ক্রিপ্টটি উল্লেখ করতে চাই যা আমি নিজেই এক্সিকিউটেবলটি খুঁজে পেতে এবং কার্যকর করতে পারি। আমি কি একই সমস্যায় পড়ব?

এই অতিরিক্ত তথ্য পরিস্থিতি স্পষ্ট করে? আগাম ধন্যবাদ.

ফটো সংযুক্ত

! [লগইন স্কিপ পরিচালনা কনসোল] [1]

! [উইন্ডোজ স্ক্রিপ্টগুলি যেগুলি কাজ করে] [2]

! [সাধারণ লিনাক্স স্ক্রিপ্ট যা কাজ করে না] [3]

দুঃখিত আমি এখনও ছবি পোস্ট করতে পারি না


আপনি যখন কোনও ব্যবহারকারী লগইন করেছেন প্রতিবার স্ক্রিপ্টটি চালানোর জন্য ক্রোন জব লিখতে চলেছেন? এই গাইডকে তাদের কার্যকর করার যোগ্য করে তুলতে সহায়তা করা উচিত
ঘুম বঞ্চিত বুলবসৌর

1
"স্ক্রিপ্টটি তৈরি করা এবং কার্যকর করা হয় যখন প্রতিটি সাধারণ ব্যবহারকারী লগ হয়" কেন? এটি আমার কাছে অযৌক্তিক মনে হওয়ায় আমি এটিকে ঠিক করব। আমি স্ক্রিপ্টটি ব্যবহারকারীকে প্যারামিটার হিসাবে খাওয়াতাম এবং তৈরির পরে স্ক্রিপ্টটি অচ্ছুত রেখে দেব।
রিঞ্জউইন্ড

1
প্রশ্নে টেনেসের এক অদ্ভুত মিশ্রণ রয়েছে যা বর্তমানে কী ঘটে এবং আপনি এটি করতে চান তা সম্পর্কে আমাকে বিভ্রান্ত করে তোলে । আপনি যদি বর্তমান পরিস্থিতিটি সম্পর্কে কিছুটা সুনির্দিষ্ট হতে পারেন তবে এটি সহায়তা করবে।
অলি

দয়া করে সম্পাদনা আপনার প্রশ্ন এবং আমাদের স্ক্রিপ্ট প্রদর্শন করুন। আমাদের আউটপুটও প্রদর্শন করুন ls -l scriptname। আপনার স্ক্রিপ্টটি ঠিক কীভাবে তৈরি করা হয়েছে এবং কেন আপনি কেবল এটি তৈরি করেন না এবং এটিকে একা রেখে দেন তাও আপনাকে স্পষ্ট করতে হবে। অবশেষে, আপনার সাধারণ ব্যবহারকারীর লেখার অ্যাক্সেস /varনা থাকা উচিত এবং তাই সেখানে ডিরেক্টরি তৈরি করতে সক্ষম হওয়া উচিত নয়।
টেরডন

1
মন্তব্যগুলিতে চিত্রের লিঙ্কগুলি পোস্ট করুন। আমরা এগুলি (প্রস্তাবিত) সম্পাদনাগুলির মাধ্যমে আমদানি করব।
মুড়ু

উত্তর:


19

আপনার দুটি জিনিস করতে হবে:

  1. স্ক্রিপ্টের শুরুতে স্ক্রিপ্ট দোভাষীকে উল্লেখ করুন:

    #!/bin/bash
  2. এটি কার্যকর করার জন্য অনুমতিগুলি সেট করুন:

    chmod +x myscript.sh

3

আপনার স্ক্রিপ্টকে সম্পাদনযোগ্য করে তোলার পরিবর্তে, আপনি আলাদা পন্থা নিতে পারেন এবং স্ক্রিপ্টটি কল করার উপায়টি পরিবর্তন করতে পারেন।

script.sh এক্সিকিউটেবল স্ক্রিপ্ট চালানোর জন্য যথেষ্ট is

যাহোক

আপনি যদি প্রোগ্রামটি চালনার জন্য নির্দিষ্ট করে থাকেন তবে অ-অরক্ষিত স্ক্রিপ্টটি চালানো সম্ভব।

তাই /bin/bash script.shবা bash script.shবা python script.pyসমস্ত অ-এক্সিকিউটেবল স্ক্রিপ্ট চালানো হবে।

সুতরাং আমার পরামর্শটি হ'ল স্ক্রিপ্টটি যেভাবে বলা হয় তা সম্পাদনা করা এবং এটি চালানোর জন্য ব্যবহৃত বাইনারি নির্দিষ্ট করা উচিত।


আমার পক্ষে আমি সাধারণত তাদেরকে এক্সকিউটেবল করে তোলে, কারণ আপনি যদি এটি না করেন তবে আপনি ফাইলটি নিজে থেকে পুনরায় লঞ্চ করতে পারবেন না। উদাহরণস্বরূপ, অজগর os.execv(__file__, sys.argv)কাজ করবে না, এবং নিশ্চিতভাবে এর মতো আরও পরিস্থিতি রয়েছে। সুরক্ষা যদি লক্ষ্য হয় তবে এটি root / sudo থেকে ব্যবহার করুন পরিবর্তে ব্যবহারকারীদের বাইনারি চালাতে দিন। এছাড়াও, যদি লক্ষ্যটি সুরক্ষা হয় তবে আপনি চান না যে সেগুলি স্ক্রিপ্টগুলি চালিত করতে সক্ষম করুন, কারণ আপনি যেভাবেই সিস্টেমটিকে ক্ষতি করতে পারেন ... কার্যকরযোগ্য বা নাও। সুতরাং আমি এগুলিকে এক্সিকিউটেবল করা এড়াতে কেন গুরুত্বপূর্ণ তা দেখছি না।
m3nda

0

সি, সি ++ বা পাইথন ইত্যাদিতে একটি প্রোগ্রাম তৈরি করুন এবং ব্যাশ স্ক্রিপ্টটি কার্যকর করতে সিস্টেম কমান্ডটি ব্যবহার করুন।

উদাহরণস্বরূপ একটি সি প্রোগ্রামের মতো দেখতে হবে:

#include "stdio.h"
int main(int argc, char const *argv[])
{
    system('chmod +x path/yourbashscript.sh');
    system('path/yourbashscript.sh');
    return 0;
}

শুরুতে প্রোগ্রামটি সম্পাদন করতে এটি স্টার্টআপ প্রোগ্রামগুলির তালিকায় যুক্ত করুন। আপনার ড্যাশ থেকে স্টার্টআপ অ্যাপ্লিকেশনগুলি খুলুন এবং সংযোজিত বোতামটিতে ক্লিক করে সংকলিত সম্পাদনযোগ্যকে তালিকায় যুক্ত করুন।


2
-1: এটি আসলে কোনও উত্তর নয়। অজগর শেল স্ক্রিপ্টের চেয়ে আরও ভাল কিছু হবে কেন? একা সি! যাই হোক না কেন, আপনি আসলে এই প্রোগ্রামটি দেখতে কেমন তা প্রদর্শন করছেন না এবং আপনি কীভাবে কোনও প্রোগ্রামটিকে স্টার্টআপ প্রোগ্রাম তালিকায় যুক্ত করবেন তা ব্যাখ্যা করছেন না।
টেরডন

আপনার প্রথম প্রশ্নের উত্তর একটি প্রোগ্রামিং ভাষা কীভাবে স্ক্রিপ্টিং ভাষার চেয়ে আলাদা তা ব্যাখ্যা করে দেওয়া যেতে পারে যেমন বাকী হিসাবে আমি আমার উত্তর সম্পাদনা করেছি
akxer

সম্পাদনার জন্য ধন্যবাদ, -1 মুছে ফেলা হয়েছে। তবে লিনাক্সে শেল স্ক্রিপ্ট চালু করতে সি প্রোগ্রাম ব্যবহার করা সম্পূর্ণ অপ্রয়োজনীয় এবং প্রয়োজনহীন ওভারহেড যুক্ত করে। স্টার্টআপ অ্যাপ্লিকেশনগুলিতে কেবল স্ক্রিপ্টটি যুক্ত করবেন না কেন? অথবা, আপনি যদি সত্যিই সি ব্যবহার করতে চান তবে কেন এটি সরাসরি প্রয়োগ করবেন না? সি-তে একটি মোড়ক তৈরি করা যা লিনাক্সের অধীনে শেল স্ক্রিপ্টকে কল করে যদি আপনার স্ক্রিপ্টটি SID বিট সেট দ্বারা চালিত করার প্রয়োজন না হয় তবে তা মোটেই বোঝা যায় না। এমনকি সেক্ষেত্রে সাধারণত সহজ সমাধান রয়েছে।
টেরডন

1
-1: স্ক্রিপ্টের অনুমতিগুলি কার্যকর করার অনুমতি না থাকলে এটি এখনও ব্যর্থ হবে। তোমাকে ফোন করতে হবে bash path/yourbashscript.sh
মুড়ু

1
যা প্রশ্ন উত্থাপন করে, কেন bash path/yourbashscript.shএই সি প্রোগ্রামটি সংকলন ও পরিচালনা করার পরিবর্তে সরাসরি চালাবেন না ?
মুরু

0

কমান্ড লাইনে নিম্নলিখিতটি চালিয়ে আপনি আপনার বাশ স্ক্রিপ্টটি কার্যকর করতে পারেন।

cd ~/path/to/file
chmod +x nameoffile.sh

তারপরে, এটি শুরুতে সম্পাদন করে তৈরি করা আপনার স্টার্টআপ প্রোগ্রামগুলির তালিকায় এটি যোগ করার মাধ্যমে করা যেতে পারে @ কাকাভীরাভ বলেছিলেন।


আমার কাছে মনে হচ্ছে প্রশ্নটি (কিছুটা) দেখায় যে তিনি কীভাবে chmod করবেন তার সাথে তিনি পরিচিত। তবে তিনি স্ক্রিপ্টের মধ্যে থেকেই এটিকে সম্পাদনযোগ্য করে তোলার জন্য একটি পদ্ধতি জিজ্ঞাসা করছেন (সুতরাং তাকে নিজেই এটি করতে হবে না)। যদিও আমি এখনও পদ্ধতিটি নিয়ে প্রশ্ন করছি: উড়তে স্ক্রিপ্ট পুনরায় তৈরি করা এটি করার উপায় নয়।
রিনজউইন্ড

0

এসএইচসি একটি জেনেরিক শেল স্ক্রিপ্ট সংকলক। এটি একটি স্ক্রিপ্ট নেয়, যা কমান্ড লাইনে নির্দিষ্ট এবং সি উত্স কোড উত্পাদন করে। উত্পন্ন উত্স কোডটি তখন একটি সঙ্কুচিত বাইনারি তৈরির জন্য সংকলিত এবং সংযুক্ত করা হয়।

সংকলিত বাইনারি এখনও শেল কোডের প্রথম লাইনে নির্দিষ্ট শেল (শেবাং: #!/bin/shবা এ জাতীয়) এর উপর নির্ভর করবে , সুতরাং এসএইচসি সম্পূর্ণ স্বাধীন বাইনারি তৈরি করে না।

এসএইচসি নিজেই এরকম সংকলক নয় cc। বরং এনকোড এবং একটি শেল স্ক্রিপ্ট এনক্রিপ্ট করে এবং সংযোজন মেয়াদোত্তীর্ণকরণের ক্ষমতা সহ সি উত্স কোড উত্পন্ন করে। এরপরে এটি একটি স্ট্রিপড বাইনারি সংকলন করতে সিস্টেম সংকলক ব্যবহার করে যা মূল স্ক্রিপ্টের মতো ঠিক আচরণ করে। সম্পাদন করার পরে, সংকলিত বাইনারি ডিক্রিপ্ট করে শেলের -cবিকল্প সহ কোডটি কার্যকর করে ।


এক্সিকিউটেবলের যদি এখনও শেল এনভায়রনমেন্টের প্রয়োজন হয় তবে এর মূল বক্তব্য কী? এটি কীভাবে কেবল একটি #!এবং যোগ করার চেয়ে ভাল chmod +x?
xiota
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.