Marcel - Morearin Shell na zamani don Linux


Marcel shine sabon harsashi. Ya yi kama da kwasfa na gargajiya ta hanyoyi da yawa, amma yana yin 'yan abubuwa kaɗan daban:

  • Butip: Duk bawo suna amfani da bututu don aika rubutu daga fitowar umarnin ɗaya zuwa shigar da wani. Marcel bututu wanda aka tsara bayanansa maimakon kirtani.
  • Python: Ana aiwatar da Marcel a Python, kuma yana fallasa Python ta hanyoyi da yawa. Idan kuna buƙatar ɗan dabaru a cikin dokokinku, marcel zai baku damar bayyana shi a cikin Python.
  • Rubutu: Marcel ya ɗauki hanyar da ba a saba yin rubutun ba. Kuna iya, ba shakka, kawai rubuta jerin umarnin marcel a cikin fayil ɗin rubutu kuma ku aiwatar da su. Amma Marcel shima yana samar da API a cikin tsarin tsarin Python. Kuna iya shigo da wannan manhajan don yin rubutun Python ta hanyar da tafi dacewa fiye da yadda ake iya yi tare da Python a sarari.

Marcel yana da lasisi a ƙarƙashin GPLv3.

Shigar da Marcel Modern Shell a cikin Linux

Marcel yana buƙatar Python 3.6 ko kuma daga baya. An haɓaka shi kuma an gwada shi akan Linux, kuma galibi yana aiki akan macOS. (Idan kuna son taimakawa tashar jiragen ruwa zuwa Windows, ko don gyara ƙarancin macOS, ku taɓa.)

Don shigar da marcel don amfaninku:

# python3 -m pip install marcel

Ko kuma idan kuna son girkawa don duk masu amfani (misali, zuwa /usr/local ):

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

Da zarar ka sanya marcel, saika duba cewa yana aiki ne ta hanyar tafiyar da umarni, sannan kuma a layin da sauri, gudanar da sigar sigar:

$ marcel

Gyara Marcel Shell

Kuna iya siffanta marcel a cikin fayil ɗin ~/.marcel.py , wanda aka karanta a lokacin farawa, (kuma sake karantawa lokacin da aka gyaggyara shi). Kamar yadda zaku iya fada daga sunan fayil, gyare-gyare na marcel an yi shi a Python.

Abu daya da watakila kuna so kuyi shine don tsara saurin. Don yin wannan, kun sanya jeri ga mai saurin PROMPT. Misali, idan kana son hanzarin ka ya zama kundin adireshi na yanzu, an buga shi a koren, sai kuma a bi shi > a buga da shuɗi:

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

Sakamakon da aka samu yayi kama da wannan:

Wannan ya maye gurbin daidaitaccen PS1 sanyi wanda zaku buƙaci yi a cikin bash. Launi (0, 4, 0) yana ƙayyade kore, (muhawarar ƙimar RGB ce, a kewayon 0-5). PWD shine canjin yanayi wanda yake wakiltar kundin adireshin ku na yanzu kuma prefixing wannan canji tare da lambda: yana haifar da aiki, ana kimantawa duk lokacin da aka nuna saurin.

~/.marcel.py kuma na iya shigo da kayayyaki Python. Misali, idan kuna son yin amfani da ayyukan rukunin lissafi a cikin dokokinku na ban mamaki:

from math import *

Da zarar ka gama wannan, za ka iya koma zuwa alamomi daga wannan rukunin, misali. pi :

Lura cewa pi an yi aiki da shi. Gabaɗaya, marcel yana amfani da yara don iyakance maganganun Python. Don haka (pi) yana kimanta furucin Python wanda zai dawo da ƙimar pi mai canji. Hakanan zaka iya samun damar sauyin yanayi na al'ada ta wannan hanyar, misali. (MAI AMFANI) da (HOME), ko kowane ingantaccen furucin Python dogaro da alamomi a cikin jerin sunayen marcel.

Kuma zaku iya, ba shakka, ayyana alamunku. Misali, idan ka sanya ma'anar wannan aikin a cikin ~/.marcel.py :

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

to, zaku iya amfani da aikin gaskiyar akan layin umarni, misali.

Marcel Shell Misalai

Anan, zamu koya wasu misalai na umarni a cikin harsashin marcel.

Bincika kundin adireshi na yanzu a sake dawowa, tara fayilolin ta hanyar fadada su (misali .txt , .py da sauransu), kuma lissafa girman fayil ɗin kowane rukuni.

Kuna iya yin wannan a cikin marcel kamar haka:

Mai aikin ls yana samar da kwararar abubuwan Fayil, ( -fr na nufin ziyartar kundin adireshi akai-akai, kuma dawo da fayiloli kawai).

Ana saka abubuwa na Fayil zuwa umarni na gaba, taswira. Taswirar tana ayyana aikin Python, a cikin ƙananan iyaye, wanda ke taswira kowane fayil zuwa ƙuƙwalwar da ke ɗauke da fayel, kuma girmanta ne. (Marcel yana ba da damar cire kalmar lambda.)

Mai jan (rage), ƙungiyoyi ta ɓangaren farko na ƙara (tsawaita) sannan kuma ya taƙaita girman a cikin kowane rukuni. An tsara sakamakon ta tsawo.

Bututun ruwa na iya ƙunsar cakuda masu sarrafa marcel da masu gudanar da aiki. Masu aiki suna bututun abubuwa, amma a iyakar mai aiki/aiwatarwa, maɓallin bututun marcel maimakon.

Misali, wannan umarnin ya hada masu aiki da aiwatarwa kuma ya lissafa sunayen masu amfani na masu amfani wanda harsashi yake /bin/bash .

$ cat /etc/passwd \
| map (line: line.split(':')) \
| select (*line: line[-1] == '/bin/bash') \
| map (*line: line[0]) \
| xargs echo

cat ne mai aiwatar da Linux. Yana karanta/sauransu/passwd, kuma marcel bututun abubuwan da ke ciki zuwa ƙasa zuwa taswirar mai sarrafa marcel.

Maganar mahaifa don taswira aiki ne na Python wanda ke raba layuka a : masu raba, suna samar da 7-tuples. Zaɓi shine mai ba da labari wanda hujjarsa aikin Python ce ta gano waɗancan tuples ɗin waɗanda filin ƙarshe shine/bin/bash.

Mai aiki na gaba, wani taswira yana riƙe filin sunan mai amfani na kowane ƙaramin abu. Aƙarshe, xargs echo ya haɗu da sunayen masu amfani masu shigowa zuwa layi ɗaya, wanda aka buga zuwa tsayi.

Rubutu a cikin Marcel Shell

Duk da yake Python wani lokacin ana ɗaukarsa a matsayin yaren rubutun, ba ya yin aiki da kyau don wannan dalilin. Matsalar ita ce yin umarnin harsashi, da sauran masu aiwatarwa daga Python yana da wahala. Kuna iya amfani da os.system() , wanda yake da sauƙi amma sau da yawa bai dace ba don ma'amala da stdin, stdout, da stderr. subprocess.Popen() yafi karfi amma yafi hadadden amfani.

Hanyar Marcel shine don samar da ƙirar da ke haɗa masu sarrafa marcel tare da fasalin yaren Python. Don sake duba misali na baya, ga lambar Python don ƙididdige jimlar girman fayiloli ta ƙari:

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})

Umurnin harsashi iri ɗaya ne da na da, banda taron ƙira. Don haka ls -fr ya juya zuwa ls (fayil = Gaskiya, recursive = Gaskiya). Taswirar da masu jan aiki suna wurin ma, an haɗa su da bututu, kamar yadda yake a cikin fasalin harsashi. Dukkanin umarnin kwasfa (ls… ja) yana samar da mai karanta Python saboda a iya amfani da umarnin tare da Python's don madauki.

Samun Bayanan Bayanai tare da Marcel Shell

Kuna iya haɗa hanyoyin samun bayanai tare da bututun marcel. Da farko, kuna buƙatar saita hanyar samun bayanai a cikin fayil ɗin daidaitawa, ~/.marcel.py , misali

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

DB_DEFAULT = 'jao'

Wannan yana daidaita damar zuwa gidan yanar gizon Postgres mai suna acme, ta amfani da direba na psycopg2. Za a yi haɗi daga marcel ta amfani da mai amfani da jao, kuma sunan mai bayanan bayanan suna jao. (DB_DEFAULT ya ƙayyade bayanan bayanan jao a matsayin wanda za a yi amfani da shi idan ba a bayyana bayanin martaba ba.) Tare da wannan daidaitaccen aikin da aka yi, yanzu ana iya tambayar bayanan ta amfani da sql operator, misali

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

Wannan umarnin yana tambayar tebur mai suna sashi, kuma yana jefa sakamakon tambaya a cikin fayil ɗin ~/reorder.csv , a cikin tsarin CSV.

Samun Nesa tare da Marcel Shell

Hakanan don samun damar bayanai, damar nesa za a iya saita shi cikin ~/.marcel.py . Misali, wannan yana daidaita tarin -node 4-node:

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'])

Za a iya gano gungu a matsayin lab a cikin umarnin marcel. Mai amfani da sigogin asali sun ƙayyade bayanin shiga, kuma sashin mai gabatarwar ya ƙayyade adiresoshin IP na nodes ɗin a kan gungu.

Da zarar an daidaita gungu, duk nodes za a iya aiki sau ɗaya. Misali, don samun jerin pids na aiwatarwa da layin umarni a fadin tarin:

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

Wannan yana dawo da rafin (adireshin IP, PID, layin umarni) tuples.

Don ƙarin bayani ziyarci:

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

Marcel ya kasance sabon sabo kuma yana ƙarƙashin ci gaba mai aiki. Samu lamba idan kanaso a taimaka.