Marcel - Ikarahun Igbalode diẹ sii fun Lainos


Marcel jẹ ikarahun tuntun. O jọra si awọn ikarahun aṣa ni ọpọlọpọ awọn ọna, ṣugbọn o ṣe awọn nkan diẹ yatọ.

  • Paipu: Gbogbo awọn ibon nlanla lo awọn paipu lati firanṣẹ ọrọ kan lati iṣejade aṣẹ kan si titẹsi ti omiiran. Awọn data eleto Marcel dipo awọn okun.
  • Python: Marcel ti wa ni imuse ni Python, ati ṣafihan Python ni awọn ọna pupọ. Ti o ba nilo ọgbọn diẹ ninu awọn ofin rẹ, marcel ngbanilaaye lati ṣafihan rẹ ni Python.
  • Iwe afọwọkọ: Marcel gba ọna ti ko dani si afọwọkọ. O le, nitorinaa, nirọrun kọ lẹsẹsẹ ti awọn ofin marcel ninu faili ọrọ kan ki o ṣe wọn. Ṣugbọn Marcel tun pese API ni irisi modulu Python. O le gbe modulu yii wọle lati ṣe iwe afọwọkọ Python ni ọna ti o rọrun diẹ sii ju ti ṣee ṣe pẹlu Python lasan.

Marcel ni iwe-aṣẹ labẹ GPLv3.

Fifi Marcel Modern Shell sori ẹrọ Linux

Marcel nilo Python 3.6 tabi nigbamii. O ti ni idagbasoke ati idanwo lori Linux, ati pe o ṣiṣẹ julọ lori macOS. (Ti o ba fẹ ṣe iranlọwọ ibudo si Windows, tabi lati ṣatunṣe awọn aipe macOS, kan si.)

Lati fi sori ẹrọ marcel fun lilo ti ara rẹ:

# python3 -m pip install marcel

Tabi ti o ba fẹ fi sori ẹrọ fun gbogbo awọn olumulo (fun apẹẹrẹ, si /usr/agbegbe ):

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

Lọgan ti o ba ti fi sori ẹrọ marcel, ṣayẹwo pe o n ṣiṣẹ nipa ṣiṣe marcel aṣẹ, ati lẹhinna ni itọsi marcel, ṣiṣe aṣẹ ẹya:

$ marcel

Isọdi ti Marcel Shell

O le ṣe akanṣe marcel ninu faili ~/.marcel.py , eyiti a ka ni ibẹrẹ, (ati atunkọ nigba ti a yipada). Bi o ṣe le sọ lati orukọ faili naa, isọdi ti marcel ti ṣe ni Python.

Ohun kan ti o fẹ ṣe lati ṣe ni lati ṣe akanṣe iyara naa. Lati ṣe eyi, o fi akojọ kan si oniyipada PROMPT. Fun apẹẹrẹ, ti o ba fẹ ki itọsẹ rẹ jẹ itọsọna lọwọlọwọ, tẹjade ni alawọ ewe, atẹle nipa > tẹjade ni buluu:

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

Abajade tọ dabi eleyi:

Eyi rọpo iṣeto-ọrọ inscrutable PS1 ti iwọ yoo nilo lati ṣe ni bash. Awọ (0, 4, 0) ṣalaye alawọ ewe, (awọn ariyanjiyan jẹ awọn iye RGB, ni sakani 0-5). PWD jẹ oniyipada ayika ti o nsoju itọsọna lọwọlọwọ rẹ ati ṣajuju oniyipada yii pẹlu lambda: ṣe ipilẹṣẹ iṣẹ kan, ṣe iṣiro ni igbakugba ti iṣafihan naa ba han.

~/.marcel.py tun le gbe awọn modulu Python wọle. Fun apẹẹrẹ ,, ti o ba ti o ba fẹ lati lo awọn iṣẹ ti awọn eko isiro module ninu rẹ marcel ase:

from math import *

Lọgan ti o ba ti ṣe eyi, o le tọka si awọn aami lati modulu yẹn, fun apẹẹrẹ. pi :

Akiyesi pe pi ti ni iwe-aṣẹ. Ni gbogbogbo, marcel nlo awọn akọmọ lati ṣe iyasọtọ awọn ifihan Python. Nitorinaa (pi) ṣe iṣiro ikosile Python ti o gba iye ti oniyipada pi. O tun le wọle si awọn oniyipada ayika agbegbe ni ọna yii, fun apẹẹrẹ. (USER) ati (ILE), tabi eyikeyi ikosile Python to wulo ti o gbẹkẹle awọn aami ninu aaye orukọ marcel.

Ati pe o le, dajudaju, ṣalaye awọn aami tirẹ. Fun apẹẹrẹ, ti o ba fi itumọ iṣẹ yii sinu ~/.marcel.py :

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

lẹhinna o le lo iṣẹ otitọ lori laini aṣẹ, fun apẹẹrẹ.

Awọn apẹẹrẹ Ikarahun Marcel

Nibi, a yoo kọ diẹ ninu awọn apẹẹrẹ ti awọn aṣẹ ninu ikarahun marcel.

Ṣawari itọsọna ti isiyi ni ifaseyin, ṣajọpọ awọn faili nipasẹ itẹsiwaju wọn (fun apẹẹrẹ .txt , .py ati bẹbẹ lọ), ki o ṣe iṣiro iwọn faili lapapọ fun ẹgbẹ kọọkan.

O le ṣe eyi ni marcel gẹgẹbi atẹle:

Oniṣẹ ls ṣe agbejade ṣiṣan kan ti awọn nkan Faili, ( -fr tumọ si ibewo awọn ilana ni iforukọsilẹ, ati dapada awọn faili nikan).

Awọn ohun elo Faili ti wa ni paipu si aṣẹ atẹle, maapu. Maapu naa ṣalaye iṣẹ Python kan, ninu awọn akọmọ ti ita, eyiti o ya awọn faili kọọkan si tuple ti o ni itẹsiwaju faili naa, o si jẹ iwọn. (Marcel gba aaye laaye lambda koko-ọrọ lambda.)

Oniṣẹ pupa (din), awọn ẹgbẹ nipasẹ apakan akọkọ ti tuple (itẹsiwaju) ati lẹhinna ṣapọ awọn titobi laarin ẹgbẹ kọọkan. Abajade ni lẹsẹsẹ nipasẹ itẹsiwaju.

Awọn paipu le ni adalu awọn oniṣẹ marcel ati awọn alaṣẹ agbalejo. Awọn oniṣẹ paipu awọn nkan, ṣugbọn ni awọn aala oniṣẹ/ṣiṣe, awọn paipu marcel dipo.

Fun apẹẹrẹ, aṣẹ yii ṣapọpọ awọn oniṣẹ ati awọn aṣiṣẹ ati ṣe atokọ awọn orukọ olumulo ti awọn olumulo ti ikarahun jẹ /bin/bash .

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

o nran jẹ ṣiṣe Linux kan. O ka/ati bẹbẹ lọ/passwd, ati awọn paipu marcel awọn akoonu rẹ ni isalẹ si maapu onise marcel.

Ariyanjiyan obi lati ṣe aworan agbaye jẹ iṣẹ Python kan ti o pin awọn ila ni : awọn oluyapa, ti o fun ni 7-tuples. Aṣayan jẹ oniṣe marcel kan ti ariyanjiyan rẹ jẹ iṣẹ Python ti o n ṣe idanimọ awọn tuples wọnyẹn eyiti aaye ti o kẹhin jẹ/bin/bash.

Oniṣẹ ti nbọ, maapu miiran n tọju aaye orukọ olumulo ti titẹ sii kọọkan. Lakotan, iwogs iwoki ṣe idapọ awọn orukọ olumulo ti nwọle sinu laini kan, eyiti o tẹjade lati gaga.

Mimọ ni Marcel Shell

Lakoko ti a ṣe akiyesi Python nigbakan lati jẹ ede iwe afọwọkọ, ko ṣiṣẹ gangan fun idi naa. Iṣoro naa ni pe ṣiṣe awọn aṣẹ ikarahun, ati awọn alaṣe miiran lati Python jẹ ohun ti o nira. O le lo os.system() , eyiti o rọrun ṣugbọn nigbagbogbo ko to fun ṣiṣe pẹlu stdin, stdout, ati stderr. Apoti() ni agbara diẹ sii ṣugbọn eka diẹ sii lati lo.

Ọna Marcel ni lati pese modulu kan ti o ṣepọ awọn oniṣẹ marcel pẹlu awọn ẹya ede Python. Lati ṣe atunyẹwo apẹẹrẹ tẹlẹ, eyi ni koodu Python fun iširo apao awọn titobi faili nipasẹ itẹsiwaju:

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

Awọn aṣẹ ikarahun jẹ kanna bii tẹlẹ, ayafi fun awọn apejọ adapọ. Nitorinaa ls -fr yipada si ls (faili = Otitọ, recursive = Otitọ). Maapu ati awọn oniṣẹ pupa wa nibẹ paapaa, ti sopọ pẹlu awọn paipu, bi ninu ẹya ikarahun naa. Gbogbo aṣẹ ikarahun (ls… pupa) ṣe agbejade aṣetunṣe Python ki aṣẹ le ṣee lo pẹlu Python's fun lupu kan.

Wiwọle si aaye data pẹlu Marcel Shell

O le ṣepọ iraye si data pẹlu awọn opo gigun ti epo. Ni akọkọ, o nilo lati tunto iraye si data ni faili atunto, ~/.marcel.py , fun apẹẹrẹ.

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

DB_DEFAULT = 'jao'

Eyi tunto iraye si ibi ipamọ data Postgres ti a npè ni acme, ni lilo awakọ psycopg2. Awọn isopọ lati marcel yoo ṣee ṣe nipa lilo olumulo jao, ati pe profaili database ni orukọ jao. {

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

Aṣẹ yii n beere tabili kan ti a npè ni apakan, o si da abajade ibeere naa sinu faili ~/reorder.csv , ni ọna kika CSV.

Wiwọle latọna jijin pẹlu Marcel Shell

Bakanna si iraye si ibi ipamọ data, iraye si latọna jijin le tunto ni ~/.marcel.py . Fun apẹẹrẹ, eyi ṣe atunto iṣupọ oju-4 kan:

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

A le damo iṣupọ bi laabu ninu awọn ofin marcel. Olumulo ati awọn iṣiro idanimọ ṣe alaye alaye iwọle, ati pe oluṣamulo ogun ṣalaye awọn adirẹsi IP ti awọn apa lori iṣupọ.

Lọgan ti a ti tunto iṣupọ, gbogbo awọn apa le ṣee ṣiṣẹ ni ẹẹkan. Fun apẹẹrẹ, lati gba atokọ ti awọn pids ilana ati awọn laini aṣẹ kọja iṣupọ:

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

Eyi pada san ti (adiresi IP, PID, laini aṣẹ) tuples pada.

Fun ibewo alaye diẹ sii:

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

Marcel jẹ tuntun tuntun ati labẹ idagbasoke ti nṣiṣe lọwọ. Gba ifọwọkan ti o ba fẹ ṣe iranlọwọ lati jade.