Marsels - modernāka čaula Linux


Marsels ir jauns apvalks. Tas daudzējādā ziņā ir līdzīgs tradicionālajiem apvalkiem, taču dažas lietas dara atšķirīgi:

  • Cauruļvadi: visi čaulas izmanto caurules, lai nosūtītu tekstu no vienas komandas izvades uz citas ievades tekstu. Marsels virkņu vietā strukturē datus.
  • Python: Marsels tiek ieviests Python, un tas daudzos veidos atklāj Python. Ja komandās ir nepieciešams nedaudz loģikas, marcel ļauj to izteikt Python.
  • Skriptu veidošana: Marsels skriptu veidošanā izmanto neparastu pieeju. Protams, jūs varat vienkārši ierakstīt marcela komandu secību teksta failā un izpildīt tās. Bet Marsels nodrošina arī API Python moduļa formā. Jūs varat importēt šo moduli, lai veiktu Python skriptu daudz ērtāk, nekā tas ir iespējams ar parasto Python.

Marsels ir licencēts saskaņā ar GPLv3.

Marcel Modern Shell instalēšana Linux

Marsels prasa Python 3.6 vai jaunāku versiju. Tas ir izstrādāts un pārbaudīts operētājsistēmā Linux, un tas galvenokārt darbojas uz MacOS. (Ja vēlaties palīdzēt pārnest uz Windows vai novērst MacOS trūkumus, sazinieties.)

Lai instalētu marcelu savām vajadzībām:

# python3 -m pip install marcel

Vai arī, ja vēlaties instalēt visiem lietotājiem (piemēram, uz /usr/local ):

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

Kad esat instalējis marcel, pārbaudiet, vai tas darbojas, palaižot komandu marcel un pēc tam marcel uzvednē palaidiet komandu version:

$ marcel

Marcel Shell pielāgošana

Marcelu var pielāgot failā ~/.marcel.py , kas tiek nolasīts startēšanas laikā (un pēc atkārtotas lasīšanas, kad tiek modificēts). Kā jūs varat noteikt pēc faila nosaukuma, marcela pielāgošana tiek veikta Python.

Viena lieta, ko jūs droši vien vēlaties darīt, ir pielāgot uzvedni. Lai to izdarītu, mainīgajam PROMPT jāpiešķir saraksts. Piemēram, ja vēlaties, lai uzvedne būtu pašreizējais direktorijs, iespiests zaļā krāsā, kam seko > , kas drukāts ar zilu krāsu:

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

Iegūtā uzvedne izskatās šādi:

Tas aizstāj neizprotamo PS1 konfigurāciju, kas jums būtu jādara bash. Krāsa (0, 4, 0) norāda zaļu krāsu (argumenti ir RGB vērtības diapazonā no 0 līdz 5). PWD ir vides mainīgais, kas attēlo jūsu pašreizējo direktoriju un pirms šī mainīgā pievienošanas lambda: ģenerē funkciju, kas tiek novērtēta katru reizi, kad tiek parādīta uzvedne.

~/.marcel.py var importēt arī Python moduļus. Piemēram, ja Marcel komandās vēlaties izmantot matemātikas moduļa funkcijas:

from math import *

Kad esat to izdarījis, varat atsaukties uz šī moduļa simboliem, piem. pi :

Ņemiet vērā, ka pi ir iekavās. Parasti Marsels izmanto iekavas, lai norobežotu Python izteicienus. Tātad (pi) novērtē Python izteiksmi, kas iegūst mainīgā pi vērtību. Šādā veidā varat piekļūt arī tradicionālajiem vides mainīgajiem, piem. (USER) un (HOME), vai jebkura derīga Python izteiksme, kas paļaujas uz simboliem marcela vārdu telpā.

Un jūs, protams, varat definēt savus simbolus. Piemēram, ja šo funkcijas definīciju ievietojat ~/.marcel.py :

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

tad komandrindā var izmantot faktoriālo funkciju, piem.

Marsela Čaulas piemēri

Šeit mēs uzzināsim dažus marcela apvalka komandu piemērus.

Rekurzīvi izpētiet pašreizējo direktoriju, grupējiet failus pēc to paplašinājuma (piemēram, .txt , .py un tā tālāk) un aprēķiniet katras grupas kopējo faila lielumu.

Marselā to var izdarīt šādi:

Operators ls izveido failu objektu straumi ( -fr nozīmē, ka rekurzīvi apmeklē direktorijus un atgriež tikai failus).

Failu objekti tiek novirzīti uz nākamo komandu, karti. Karte attālākajās iekavās norāda funkciju Python, kas katru failu kartē ar kopu, kas satur faila paplašinājumu, un tā lielumu. (Marsels ļauj izlaist lambda atslēgvārdu.)

Sarkanais (samazināt) operators sagrupējas pēc kopas pirmās daļas (pagarinājuma) un pēc tam summē katras grupas izmērus. Rezultāts tiek sakārtots pēc paplašinājuma.

Cauruļvados var būt apvienoti maršelu operatori un resursdatora izpildāmie faili. Operatori pīpē objektus, bet pie operatora/izpildāmās robežas tā vietā marķē pīpes.

Piemēram, šī komanda apvieno operatorus un izpildāmos failus un uzskaita to lietotāju lietotājvārdus, kuru čaula ir /bin/bash .

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

kaķis ir Linux izpildāms. Tas nolasa/etc/passwd un marcel nosūta tā saturu lejup pa straumi uz marcel operatora karti.

Iekavētais kartēšanas arguments ir Python funkcija, kas sadala līnijas atdalītājos : , iegūstot 7 kopas. Select ir marsela operators, kura arguments ir Python funkcija, kas identificē tos kopas, kurās pēdējais lauks ir/bin/bash.

Nākamais operators, cita karte, saglabā katra ievades kopas lietotājvārda lauku. Visbeidzot, xargs echo apvieno ienākošos lietotājvārdus vienā rindā, kas tiek izdrukāta stdout.

Scenāriji Marsela čaulā

Kaut arī Python dažreiz tiek uzskatīts par skriptu valodu, tas šim nolūkam faktiski nedarbojas labi. Problēma ir tā, ka čaulas komandu un citu izpildāmo failu palaišana no Python ir apgrūtinoša. Varat izmantot os.system() , kas ir vienkāršs, bet bieži vien nepietiekams, lai tiktu galā ar stdin, stdout un stderr. subprocess.Popen() ir jaudīgāks, bet sarežģītāk lietojams.

Marsela pieeja ir nodrošināt moduli, kas integrē marcel operatorus ar Python valodas funkcijām. Lai atkārtoti apskatītu agrāku piemēru, šeit ir Python kods failu lielumu summas aprēķināšanai pēc paplašinājuma:

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

Apvalka komandas ir tādas pašas kā iepriekš, izņemot sintaktiskās konvencijas. Tātad ls -fr pārvēršas par ls (file = True, rekursīvs = True). Arī kartes un sarkanie operatori ir savienoti ar caurulēm, tāpat kā čaulas versijā. Visa čaulas komanda (ls… sarkana) dod Python iteratoru, lai komandu varētu izmantot kopā ar Python’s ciklam.

Piekļuve datu bāzēm ar Marselu Šellu

Jūs varat integrēt piekļuvi datubāzei ar marcel cauruļvadiem. Pirmkārt, konfigurācijas failā jākonfigurē piekļuve datubāzei ~/.marcel.py , piem.

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

DB_DEFAULT = 'jao'

Tas konfigurē piekļuvi Postgres datu bāzei ar nosaukumu acme, izmantojot draiveri psycopg2. Savienojumi no marcel tiks izveidoti, izmantojot jao lietotāju, un datu bāzes profils tiek nosaukts jao. (DB_DEFAULT norāda jao datu bāzes profilu kā tādu, kas jāizmanto, ja nav norādīts neviens profils.) Veicot šo konfigurāciju, datu bāzi tagad var pieprasīt, izmantojot sql operatoru, piem.

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

Šī komanda vaicā tabulu ar nosaukumu un izmet vaicājuma rezultātu failā ~/reorder.csv CSV formātā.

Attālā piekļuve ar Marcel Shell

Tāpat kā piekļuvi datu bāzei, attālo piekļuvi var konfigurēt sadaļā ~/.marcel.py . Piemēram, tas konfigurē 4 mezglu kopu:

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

Kopu var identificēt kā laboratoriju marcel komandās. Lietotāja un identitātes parametri norāda pieteikšanās informāciju, un resursdatora parametrs norāda klastera mezglu IP adreses.

Kad klasteris ir konfigurēts, visus mezglus var darbināt vienlaikus. Piemēram, lai iegūtu kopas procesa noturēšanas un komandrindu sarakstu:

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

Tas atgriež (IP adreses, PID, komandrindas) kopu plūsmu.

Lai iegūtu vairāk informācijas, apmeklējiet:

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

Marsels ir diezgan jauns un aktīvi attīstās. Sazinieties, ja vēlaties palīdzēt.