Marsel - Linux üçin has döwrebap gabyk


Marsel täze gabyk. Köp tarapdan adaty gabyklara meňzeýär, ýöne birnäçe zady başgaça edýär:

  • Geçiriji: shellhli gabyklar bir buýrugyň çykyşyndan beýlekisiniň girişine tekst ibermek üçin turbalary ulanýarlar. Marsel turbalaryň ýerine strukturalaýyn maglumatlary.
  • Python: Marsel Python-da amala aşyrylýar we Pythony birnäçe görnüşde paş edýär. Buýruklaryňyzda biraz logika gerek bolsa, Marsel ony Pythonda aňlatmaga mümkinçilik berýär.
  • ripazgy: Marsel skriptlere adaty bolmadyk çemeleşýär. Elbetde, tekst faýlynda Marsel buýruklarynyň yzygiderliligini ýazyp, ýerine ýetirip bilersiňiz. Celöne Marsel Python moduly görnüşindäki API-ni hem üpjün edýär. Python skriptini etmek üçin bu moduly ýönekeý Python bilen mümkin bolanyndan has amatly görnüşde import edip bilersiňiz.

Marsel GPLv3 boýunça ygtyýarnama alýar.

Marsel Modern Shell-i Linux-da gurmak

Marsel Python 3.6 ýa-da has soňraky talap edýär. Linux-da işlenip düzüldi we synagdan geçirildi we esasan macOS-da işleýär. (Windows-a porta kömek etmek ýa-da macOS kemçiliklerini düzetmek isleseňiz habarlaşyň.)

Marsel öz ulanyşyňyz üçin:

# python3 -m pip install marcel

Ora-da ähli ulanyjylar üçin gurmak isleseňiz (meselem, /usr/local ):

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

Marsel guranyňyzdan soň, Marsel buýrugyny işledip, işleýändigini barlaň, soňra bolsa Marsel buýrugynda wersiýa buýrugyny işlediň:

$ marcel

Marsel gabygyny özleşdirmek

Marsel başlangyçda okalýan (we üýtgedilende täzeden okaň) ~/.marcel.py faýlynda sazlap bilersiňiz. Faýlyň adyndan bilşiňiz ýaly, Marsel-i özleşdirmek Python-da edilýär.

Probablyhtimal, etjek bolýan bir zadyňyz, islegi düzmekdir. Munuň üçin PROMPT üýtgeýjisine sanaw bellärsiňiz. Mysal üçin, islegiňiziň ýaşyl reňkde çap edilen, soňra bolsa gök reňkde çap edilen > häzirki katalog bolmagyny isleseňiz:

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

Alnan haýyş şeýle görünýär:

Bu, başda etmeli boljak düşündirip bolmaýan PS1 konfigurasiýasynyň ýerini alýar. Reňk (0, 4, 0) ýaşyl görkezýär, (argumentler RGB bahalary, 0-5 aralygynda). PWD, häzirki katalogyňyzy görkezýän we bu üýtgeýjini lambda: bilen goşmak bilen daşky gurşaw üýtgeýjisidir, her gezek görkezme görkezilende baha berilýär.

~/.marcel.py Python modullaryny hem import edip biler. Mysal üçin, matematika modulynyň funksiýalaryny marcel buýruklaryňyzda ulanmak isleseňiz:

from math import *

Muny edeniňizden soň, şol moduldaky nyşanlara ýüz tutup bilersiňiz. pi :

pi birikdirilendigini ýadyňyzdan çykarmaň. Umuman, Marsel Python aňlatmalaryny aýyrmak üçin gabygy ulanýar. Şonuň üçin (pi) üýtgeýän pi-iň bahasyny alýan Python aňlatmasyna baha berýär. Şeýle hem adaty daşky gurşaw üýtgeýjilerine şu görnüşde girip bilersiňiz. (USER) we (HOME), ýa-da Marseliň at giňişligindäki nyşanlara daýanýan islendik Python aňlatmasy.

Elbetde, öz nyşanlaryňyzy kesgitläp bilersiňiz. Mysal üçin, bu funksiýanyň kesgitlemesini ~/.marcel.py goýsaňyz:

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

soň buýruk setirindäki faktorial funksiýany ulanyp bilersiňiz, meselem.

Marsel Shell mysallary

Bu ýerde, Marsel gabygyndaky buýruklaryň käbir mysallaryny öwreneris.

Häzirki katalogy yzygiderli gözden geçiriň, faýllary giňeltmek boýunça toparlaň (meselem: .txt , .py we ş.m.) we her topar üçin umumy faýl ölçegini hasaplaň.

Muny marcel görnüşinde aşakdaky ýaly edip bilersiňiz:

Ls operatory Faýl obýektleriniň akymyny öndürýär, ( -fr kataloglara yzygiderli baryp görmegi we diňe faýllary yzyna gaýtarmagy aňladýar).

Faýl obýektleri indiki buýruga, karta geçirilýär. Kartada daşky gabygyň içinde Python funksiýasyny kesgitleýär, her faýly faýlyň giňelmesini we ululygyny öz içine alýan topbak bilen kartalaşdyrýar. (Marsel lambda açar sözüni goýmaga mümkinçilik berýär.)

Gyzyl (azaltmak) operatory, topbagyň birinji bölegi boýunça toparlara bölünýär we soňra her toparyň içindäki ululyklary jemleýär. Netije giňeltmek boýunça tertiplenýär.

Turbageçirijilerde Marsel operatorlarynyň we ýerine ýetiriji ýerine ýetirijileriň garyndysy bolup biler. Operatorlar obýektleri turba edýärler, ýöne operatoryň/ýerine ýetirip boljak serhetlerde Marsel turbalarynyň setirleri.

Mysal üçin, bu buýruk operatorlary we ýerine ýetirip bolýanlary birleşdirýär we gabygy /bin/bash ulanyjylaryň ulanyjy atlaryny görkezýär.

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

pişik Linux ýerine ýetirip bolýar. Onda/etc/passwd okaýar we Marsel mazmunyny marcel operatory kartasyna aşak akdyrýar.

Karta üçin birikdirilen argument, Python funksiýasy bolup, setirleri : bölüjilerde bölýär we 7 topbak berýär. Saýlaw, iň soňky meýdan/bin/bash bolan toplary kesgitleýän Python funksiýasy bolan Marsel operatorydyr.

Indiki operator, başga bir karta her giriş topbagynyň ulanyjy adyny saklaýar. Netijede, “xargs echo” gelýän ulanyjy atlaryny stdout-a çap edilen bir setire birleşdirýär.

Marsel Shell-de skript

Python käwagt skript dili hasaplanylsa-da, aslynda bu maksat bilen gowy işlemeýär. Mesele, gabyk buýruklaryny we Python-dan beýleki ýerine ýetirijileri işletmek kyn. Stdin, stdout we stderr bilen iş salyşmak üçin ýönekeý, ýöne köplenç ýeterlik däl os.system() ulanyp bilersiňiz. subprocess.Popen() ulanmak has güýçli, ýöne has çylşyrymly.

Marseliň çemeleşmesi, Marsel operatorlaryny Python-yň dil aýratynlyklary bilen birleşdirýän modul bermekdir. Öňki mysaly täzeden gözden geçirmek üçin, faýl ululyklarynyň jemini giňeltmek arkaly hasaplamak üçin Python kody:

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

Sintaktik konwensiýalardan başga gabyk buýruklary öňküsi ýalydyr. Şeýlelik bilen ls -fr ls-e öwrülýär (faýl=Hakyky, gaýtalanýan=Hakyky). Karta we gyzyl operatorlar, gabyk görnüşindäki ýaly turbalar bilen birikdirilen. Shehli gabyk buýrugy (ls… gyzyl) Python-yň aýlawy üçin ulanylmagy üçin Python iteratoryny berýär.

Marsel Shell bilen maglumat bazasyna giriş

Maglumat bazasyna girişi marcel turbalary bilen birleşdirip bilersiňiz. Ilki bilen, ~/.marcel.py konfigurasiýa faýlynda maglumat bazasyna girişi sazlamaly.

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

DB_DEFAULT = 'jao'

Bu, psycopg2 draýwerini ulanyp, acme atly Postgres maglumatlar bazasyna girişi düzýär. Marselden birikmeler jao ulanyjysynyň kömegi bilen amala aşyrylar we maglumatlar bazasynyň profiline jao diýilýär. .

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

Bu buýruk bölek atly tablisany soraýar we talap netijesini CSV formatda ~/reorder.csv faýlyna taşlaýar.

Marsel Shell bilen uzakdan giriş

Maglumat bazasyna girmek ýaly, uzakdan giriş ~/.marcel.py -da düzülip bilner. Mysal üçin, bu 4 düwünli klasteri düzýär:

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

Klaster Marsel buýruklaryndaky laboratoriýa hökmünde kesgitlenip bilner. Ulanyjy we şahsyýet parametrleri giriş maglumatlary, öý eýesi parametri bolsa klasterdäki düwünleriň IP adreslerini kesgitleýär.

Klaster düzülenden soň, ähli düwünler birbada işledilip bilner. Mysal üçin, klaster boýunça proses pidleriniň we buýruk setirleriniň sanawyny almak üçin:

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

Bu (IP adresi, PID, buýruk setiri) toplaryň akymyny gaýtaryp berýär.

Has giňişleýin maglumat üçin:

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

Marsel gaty täze we işjeň ösüşde. Kömek etmek isleseňiz habarlaşyň.