কম্পিউটার

মার্সেল - লিনাক্সের জন্য আরও আধুনিক শেল

মার্সেল একটি নতুন শেল। এটি অনেক উপায়ে ঐতিহ্যবাহী শেলগুলির মতো, তবে এটি কয়েকটি জিনিস ভিন্নভাবে করে:

  • পাইপিং :সমস্ত শেল একটি কমান্ডের আউটপুট থেকে অন্য কমান্ডের ইনপুটে একটি পাঠ্য পাঠাতে পাইপ ব্যবহার করে। স্ট্রিং এর পরিবর্তে মার্সেল পাইপ স্ট্রাকচার্ড ডেটা।
  • পাইথন :মার্সেল পাইথনে প্রয়োগ করা হয়, এবং পাইথনকে বিভিন্ন উপায়ে প্রকাশ করে। আপনার কমান্ডে সামান্য যুক্তির প্রয়োজন হলে, মার্সেল আপনাকে এটি পাইথনে প্রকাশ করতে দেয়।
  • স্ক্রিপ্টিং :মার্সেল স্ক্রিপ্টিংয়ের ক্ষেত্রে একটি অস্বাভাবিক পদ্ধতি অবলম্বন করে। আপনি অবশ্যই, একটি টেক্সট ফাইলে মার্সেল কমান্ডের একটি ক্রম লিখতে পারেন এবং সেগুলি চালাতে পারেন। কিন্তু মার্সেল একটি পাইথন মডিউল আকারে একটি API প্রদান করে। আপনি প্লেইন পাইথনের চেয়ে অনেক বেশি সুবিধাজনক উপায়ে পাইথন স্ক্রিপ্টিং করতে এই মডিউলটি আমদানি করতে পারেন।

মার্সেল GPLv3 এর অধীনে লাইসেন্সপ্রাপ্ত .

লিনাক্সে মার্সেল মডার্ন শেল ইনস্টল করা হচ্ছে

মার্সেলের Python 3.6 প্রয়োজন অথবা পরে. এটি লিনাক্সে তৈরি এবং পরীক্ষা করা হয়েছে এবং এটি বেশিরভাগই macOS-এ কাজ করে . (আপনি যদি Windows এ পোর্ট করতে সাহায্য করতে চান , অথবা macOS ঠিক করতে ঘাটতি, যোগাযোগ করুন।)

marcel ইনস্টল করতে আপনার নিজের ব্যবহারের জন্য:

# python3 -m pip install marcel

অথবা আপনি যদি সমস্ত ব্যবহারকারীর জন্য ইনস্টল করতে চান (যেমন, /usr/local ):

$ sudo python3 -m pip install --prefix /usr/local marcel

একবার আপনি marcel ইনস্টল করলে , marcel কমান্ডটি চালিয়ে এটি কাজ করছে কিনা তা পরীক্ষা করুন , এবং তারপর marcel-এ প্রম্পট, সংস্করণ চালান কমান্ড:

$ marcel
মার্সেল - লিনাক্সের জন্য আরও আধুনিক শেল

মারসেল শেলের কাস্টমাইজেশন

আপনি marcel কাস্টমাইজ করতে পারেন ~/.marcel.py ফাইলে , যা স্টার্টআপে পড়া হয়, (এবং পরিবর্তিত হলে পুনরায় পড়ুন)। আপনি ফাইলের নাম থেকে বলতে পারেন, মার্সেলের কাস্টমাইজেশন পাইথনে করা হয়।

আপনি সম্ভবত একটি জিনিস করতে চান প্রম্পট কাস্টমাইজ করা. এটি করার জন্য, আপনি PROMPT-এ একটি তালিকা বরাদ্দ করুন৷ পরিবর্তনশীল উদাহরণস্বরূপ, যদি আপনি আপনার প্রম্পটটি বর্তমান ডিরেক্টরি হতে চান, সবুজ রঙে মুদ্রিত, তারপর > নীল রঙে মুদ্রিত:

PROMPT = [
    Color(0, 4, 0),
    lambda: PWD,
    Color(0, 2, 5),
    '> '
]

ফলাফল প্রম্পট এই মত দেখায়:

মার্সেল - লিনাক্সের জন্য আরও আধুনিক শেল

এটি অস্পষ্ট PS1 প্রতিস্থাপন করে কনফিগারেশন যা আপনাকে ব্যাশে করতে হবে। রঙ(0, 4, 0) সবুজ নির্দিষ্ট করে , (আর্গুমেন্ট হল RGB মান, 0-5 পরিসরে ) PWD হল পরিবেশ পরিবর্তনশীল যা আপনার বর্তমান ডিরেক্টরির প্রতিনিধিত্ব করে এবং এই ভেরিয়েবলটিকে lambda: দিয়ে প্রিফিক্স করে। একটি ফাংশন তৈরি করে, প্রতিবার প্রম্পট প্রদর্শিত হলে মূল্যায়ন করা হয়।

~/.marcel.py পাইথন মডিউলও আমদানি করতে পারে। যেমন, আপনি যদি আপনার মার্সেল কমান্ডে গণিত মডিউলের ফাংশন ব্যবহার করতে চান:

from math import *

একবার আপনি এটি সম্পন্ন করলে, আপনি সেই মডিউল থেকে চিহ্নগুলি উল্লেখ করতে পারেন, যেমন pi :

মার্সেল - লিনাক্সের জন্য আরও আধুনিক শেল মার্সেল - লিনাক্সের জন্য আরও আধুনিক শেল

মনে রাখবেন যে pi বন্ধনী করা হয়। সাধারণভাবে, marcel পাইথন এক্সপ্রেশন সীমাবদ্ধ করতে বন্ধনী ব্যবহার করে। তাই (pi) পাইথন এক্সপ্রেশন মূল্যায়ন করে যা পরিবর্তনশীল pi এর মান পুনরুদ্ধার করে . আপনি এইভাবে ঐতিহ্যগত পরিবেশ ভেরিয়েবল অ্যাক্সেস করতে পারেন, যেমন (ব্যবহারকারী) এবং (হোম) , অথবা মার্সেলের নামস্থানে চিহ্নের উপর নির্ভর করে কোনো বৈধ পাইথন অভিব্যক্তি।

এবং আপনি, অবশ্যই, আপনার নিজস্ব প্রতীক সংজ্ঞায়িত করতে পারেন. উদাহরণস্বরূপ, যদি আপনি এই ফাংশনের সংজ্ঞা ~/.marcel.py-এ রাখেন :

def factorial(n):
    f = 1
    for i in range(1, n + 1):
        f *= i
    return f

তারপর আপনি কমান্ড লাইনে ফ্যাক্টোরিয়াল ফাংশন ব্যবহার করতে পারেন, যেমন

মার্সেল - লিনাক্সের জন্য আরও আধুনিক শেল মার্সেল - লিনাক্সের জন্য আরও আধুনিক শেল

মার্সেল শেল উদাহরণ

এখানে, আমরা মার্সেল শেলের কমান্ডের কিছু উদাহরণ শিখব।

এক্সটেনশন দ্বারা ফাইলের আকার খুঁজুন

বর্তমান ডিরেক্টরিটি পুনরাবৃত্তভাবে অন্বেষণ করুন, ফাইলগুলিকে তাদের এক্সটেনশন দ্বারা গোষ্ঠীবদ্ধ করুন (যেমন .txt , .py ইত্যাদি), এবং প্রতিটি গ্রুপের জন্য মোট ফাইলের আকার গণনা করুন।

আপনি এইভাবে মার্সেলে এটি করতে পারেন:

মার্সেল - লিনাক্সের জন্য আরও আধুনিক শেল

ls অপারেটর ফাইল অবজেক্টের একটি স্ট্রিম তৈরি করে, (-fr মানে বারবার ডিরেক্টরি দেখুন, এবং শুধুমাত্র ফাইল ফেরত দিন।

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

লাল (কমানো) অপারেটর, টিপলের প্রথম অংশ দ্বারা গোষ্ঠী (এক্সটেনশন ) এবং তারপর প্রতিটি গ্রুপের মধ্যে মাপ যোগ করুন। ফলাফল এক্সটেনশন দ্বারা বাছাই করা হয়।

হোস্ট এক্সিকিউটেবল এবং মার্সেল পাইপলাইন

পাইপলাইন মার্সেল অপারেটর এবং হোস্ট এক্সিকিউটেবলের মিশ্রণ থাকতে পারে। অপারেটর পাইপ অবজেক্ট, কিন্তু অপারেটর/এক্সিকিউটেবল সীমানায়, পরিবর্তে মার্সেল পাইপ স্ট্রিং।

উদাহরণস্বরূপ, এই কমান্ডটি অপারেটর এবং এক্সিকিউটেবলকে একত্রিত করে এবং ব্যবহারকারীদের ব্যবহারকারীর নাম তালিকাভুক্ত করে যাদের শেল হল /bin/bash .

$ cat /etc/passwd \
| map (line: line.split(':')) \
| select (*line: line[-1] == '/bin/bash') \
| map (*line: line[0]) \
| xargs echo
মার্সেল - লিনাক্সের জন্য আরও আধুনিক শেল মার্সেল - লিনাক্সের জন্য আরও আধুনিক শেল

cat একটি লিনাক্স এক্সিকিউটেবল। এটি পড়ে /etc/passwd , এবং মার্সেল পাইপ এর বিষয়বস্তুকে মার্সেল অপারেটর ম্যাপে নিচের দিকে নিয়ে যায়।

ম্যাপের জন্য বন্ধনীযুক্ত আর্গুমেন্ট হল একটি পাইথন ফাংশন যা :-এ লাইনগুলিকে বিভক্ত করে। বিভাজক, ফলন 7-টুপল। একটি নির্বাচন করুন৷ একটি মার্সেল অপারেটর যার যুক্তি হল একটি পাইথন ফাংশন যা সেই টিপলগুলি সনাক্ত করে যেখানে শেষ ক্ষেত্রটি /bin/bash .

পরবর্তী অপারেটর, অন্য মানচিত্র প্রতিটি ইনপুট টিপলের ব্যবহারকারীর নাম ক্ষেত্র রাখে। অবশেষে, xargs ইকো আগত ব্যবহারকারীর নামগুলিকে একটি একক লাইনে একত্রিত করে, যা stdout এ মুদ্রিত হয়৷

মার্সেল শেলে স্ক্রিপ্টিং

যখন Python কখনও কখনও একটি স্ক্রিপ্টিং ভাষা হিসাবে বিবেচিত হয়, এটি আসলে সেই উদ্দেশ্যে ভাল কাজ করে না। সমস্যা হল যে শেল কমান্ড এবং পাইথন থেকে অন্যান্য এক্সিকিউটেবল চালানো কষ্টকর। আপনি os.system() ব্যবহার করতে পারেন , যা সহজ কিন্তু প্রায়ই stdin, stdout, এবং stderr এর সাথে ডিল করার জন্য অপর্যাপ্ত। subprocess.Popen() আরও শক্তিশালী কিন্তু ব্যবহারে আরও জটিল৷

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

from marcel.api import *

for ext, size in (ls(file=True, recursive=True)
                  | map(lambda f: (f.suffix, f.size))
                  | red('.', '+')):
    print(f'{ext}: {size})

সিনট্যাটিক কনভেনশন ব্যতীত শেল কমান্ডগুলি আগের মতোই। তাই ls -fr ls(file=True-এ পরিণত হয় , পুনরাবৃত্ত=সত্য) . মানচিত্র এবং লাল অপারেটরগুলিও রয়েছে, পাইপের সাথে সংযুক্ত, শেল সংস্করণের মতো। সম্পূর্ণ শেল কমান্ড (ls … লাল) একটি পাইথন ইটারেটর তৈরি করে যাতে কমান্ডটি লুপের জন্য পাইথনের সাথে ব্যবহার করা যায়।

মার্সেল শেলের সাথে ডেটাবেস অ্যাক্সেস

আপনি মার্সেল পাইপলাইনের সাথে ডাটাবেস অ্যাক্সেস একীভূত করতে পারেন। প্রথমে, আপনাকে কনফিগার ফাইলে ডেটাবেস অ্যাক্সেস কনফিগার করতে হবে, ~/.marcel.py , যেমন

define_db(name='jao',
          driver='psycopg2',
          dbname='acme',
          user='jao')

DB_DEFAULT = 'jao'

এটি একটি Postgres-এ অ্যাক্সেস কনফিগার করে acme নামের ডাটাবেস , psycopg2 ব্যবহার করে ড্রাইভার মার্সেল থেকে সংযোগগুলি jao ব্যবহার করে করা হবে৷ ব্যবহারকারী, এবং ডাটাবেস প্রোফাইলের নাম jao . (DB_DEFAULT jao নির্দিষ্ট করে কোনো প্রোফাইল নির্দিষ্ট না থাকলে ডাটাবেস প্রোফাইল ব্যবহার করা হবে।) এই কনফিগারেশন সম্পন্ন হলে, ডাটাবেস এখন sql অপারেটর ব্যবহার করে জিজ্ঞাসা করা যেতে পারে, যেমন.

sql 'select part_name, quantity from part where quantity < 10' \
| out --csv –-file ~/reorder.csv

এই কমান্ডটি part নামের একটি টেবিলের জন্য প্রশ্ন করে , এবং ক্যোয়ারী ফলাফল ফাইল ~/reorder.csv এ ডাম্প করে , CSV ফরম্যাটে।

মারসেল শেলের সাথে দূরবর্তী অ্যাক্সেস

একইভাবে ডাটাবেস অ্যাক্সেসের জন্য, দূরবর্তী অ্যাক্সেস ~/.marcel.py-এ কনফিগার করা যেতে পারে . উদাহরণস্বরূপ, এটি একটি 4-নোড ক্লাস্টার কনফিগার করে:

define_remote(name='lab',
              user='frankenstein',
              identity='/home/frankenstein/.ssh/id_rsa',
              host=['10.0.0.100', 
                    '10.0.0.101',
                    '10.0.0.102',
                    '10.0.0.103'])

ক্লাস্টারটিকে একটি ল্যাব হিসাবে চিহ্নিত করা যেতে পারে মার্সেল কমান্ডে। ব্যবহারকারী এবং পরিচয় পরামিতি লগইন তথ্য এবং হোস্ট নির্দিষ্ট করে প্যারামিটার ক্লাস্টারে নোডের আইপি ঠিকানা নির্দিষ্ট করে।

ক্লাস্টার কনফিগার হয়ে গেলে, সমস্ত নোড একবারে চালু করা যেতে পারে। উদাহরণস্বরূপ, প্রক্রিয়ার একটি তালিকা পেতে পিডস এবং ক্লাস্টার জুড়ে কমান্ড লাইন:

@lab [ps | map (proc: (proc.pid, proc.commandline))]

এটি (আইপি ঠিকানা, পিআইডি, কমান্ড লাইন) টিপলের একটি স্ট্রিম প্রদান করে।

আরও তথ্যের জন্য দেখুন:

  • https://www.marceltheshell.org/
  • https://github.com/geophile/marcel

মার্সেল এটি বেশ নতুন এবং সক্রিয় বিকাশের অধীনে। আপনি যদি সাহায্য করতে চান তাহলে যোগাযোগ করুন।


  1. লিনাক্সে কীভাবে সাধারণ শেল স্ক্রিপ্ট তৈরি করবেন

  2. শেল প্রোগ্রামিং শেখার জন্য লিনাক্স নতুনদের জন্য 5টি শেল স্ক্রিপ্ট - দ্বিতীয় অংশ

  3. লিনাক্স শেল প্রোগ্রামিং এর গাণিতিক দিক – চতুর্থ অংশ

  4. লিনাক্স নতুন এবং প্রশাসকদের জন্য 4টি বিনামূল্যের শেল স্ক্রিপ্টিং ইবুক