Marcel - bardziej nowoczesna skorupa dla Linuksa

Marcel - bardziej nowoczesna skorupa dla Linuksa

Marcel jest nową skorupą. Jest podobny do tradycyjnych muszli na wiele sposobów, ale robi kilka rzeczy inaczej:

  • Rurociąg: Wszystkie powłoki używają rur do wysyłania tekstu z wyjścia jednego polecenia do wejścia drugiego. Marcel ruruje dane o strukturze zamiast strun.
  • Pyton: Marcel jest wdrożony w Python i odsłania Pythona na wiele sposobów. Jeśli potrzebujesz trochę logiki w swoich poleceniach, Marcel pozwala wyrazić to w Python.
  • Skrypty: Marcel bierze nietypowe podejście do scenariuszy. Możesz oczywiście po prostu napisać sekwencję poleceń Marcel w pliku tekstowym i wykonać je. Ale Marcel zapewnia również API w postaci modułu Pythona. Możesz zaimportować ten moduł do skryptu Pythona w znacznie wygodniejszy sposób.

Marcel jest licencjonowany pod GPLV3.

Instalowanie Marce'a Modern Shell w Linux

Marcel wymaga Python 3.6 lub później. Został opracowany i przetestowany na Linux, a głównie działa System operacyjny Mac. (Jeśli chcesz pomóc Portowi Okna, lub naprawić System operacyjny Mac niedociągnięcia, skontaktuj się.)

Żeby zainstalować Marcel Do własnego użytku:

# Python3 -m Pip Instal Marcel 

Lub jeśli chcesz zainstalować dla wszystkich użytkowników (e.G., Do /usr/lokalny):

$ sudo python3 -m instalacja pip - -prefix /usr /lokalna marcel 

Po zainstalowaniu Marcel, Sprawdź, czy działa, uruchamiając polecenie Marcel, A potem w Marcel szybkie, uruchom wersja Komenda:

$ Marcel 
Sprawdź wersję Marcel Shell

Dostosowywanie Marcel Shell

Możesz dostosować Marcel w pliku ~/.Marcel.py, który jest odczytany na startup (i ponownie po zmodyfikowaniu). Jak widać z nazwiska pliku, dostosowywanie Marcela odbywa się w Python.

Jedną rzeczą, którą prawdopodobnie chcesz zrobić, jest dostosowanie podpowiedzi. Aby to zrobić, przypisujesz listę do PODPOWIEDŹ zmienny. Na przykład, jeśli chcesz, aby Twój monit był aktualnym katalogiem, wydrukowanym na zielono, a następnie > Wydrukowano na niebiesko:

Monit = [kolor (0, 4, 0), Lambda: PWD, kolor (0, 2, 5), '>'] 

Powstały wiersz wygląda tak:

Zmień kolor MARCEL SHELL

To zastępuje nieodgadkę PS1 konfiguracja, którą należy zrobić w Bash. Kolor (0, 4, 0) Określa zielony, (Argumenty są RGB Wartości w zakresie 0-5). PWD to zmienna środowiskowa reprezentująca bieżący katalog i prefiksowanie tej zmiennej z lambda: generuje funkcję ocenianą za każdym razem, gdy wyświetlany jest monit.

~/.Marcel.py może również importować moduły Python. mi.G., Jeśli chcesz użyć funkcji modułu matematycznego w swoich poleceniach Marcel:

Z importu matematycznego * 

Po zrobieniu tego możesz odwołać się do symboli z tego modułu, e.G. Liczba Pi:

Symbole Marcel Shell

Zauważ, że Liczba Pi jest nawiasem. Ogólnie, Marcel używa nawiasów do ograniczenia wyrażeń Pythona. Więc (Liczba Pi) Ocena wyrażenie Pythona, które pobiera wartość zmiennej Liczba Pi. Możesz również uzyskać dostęp do tradycyjnych zmiennych środowiskowych w ten sposób, e.G. (UŻYTKOWNIK) I (DOM), lub dowolne ważne wyrażenie Pythona polegające na symbolich w przestrzeni nazw Marcela.

I możesz oczywiście zdefiniować swoje własne symbole. Na przykład, jeśli umieścisz tę definicję funkcji ~/.Marcel.py:

def factoral (n): f = 1 dla i w zakresie (1, n + 1): f *= i zwraca f 

Następnie możesz użyć funkcji czynnikowej w wierszu poleceń, e.G.

Twórz własne symbole w Marcel

Przykłady Marcel Shell

Tutaj poznamy kilka przykładów poleceń w Marcel Shell.

Znajdź rozszerzone rozmiary plików

Zbadaj bieżący katalog rekurencyjnie, zgrupuj pliki według ich rozszerzenia (e.G. .tekst, .py i tak dalej) i oblicz całkowity rozmiar pliku dla każdej grupy.

Możesz to zrobić w Marcel w następujący sposób:

Znajdź rozszerzone rozmiary plików

Operator LS wytwarza strumień obiektów plików (-Fr oznacza rekurencyjne katalogi i zwracaj tylko pliki).

Plik Obiekty są przekładane do następnego polecenia, mapa. mapa Określa funkcję Pythona w najbardziej zewnętrznych nawiasach, która mapuje każdy plik na krotkę zawierającą rozszerzenie pliku, i jego rozmiar. (Marcel umożliwia pominięcie słowa kluczowego Lambda.)

czerwony (zmniejsz) operator, grupy według pierwszej części krotki (rozszerzenie), a następnie podsumuj rozmiary w każdej grupie. Wynik jest sortowany przez rozszerzenie.

Host Ekleganda i rurociąg Marcel

Rurociągi może zawierać mieszankę operatorów Marcela i wykonywalnych hostów. Operatorzy obiekty rurowe, ale na granicach operatora/wykonywalnego, Marcel Ripes Strings.

Na przykład to polecenie łączy operatorów i wykonywalne i wymienia nazwy użytkowników użytkowników, których powłożenie jest /bin/bash.

$ cat /etc /passwd \ | Mapa (linia: linia.split (':')) \ | Wybierz (*linia: linia [-1] == '/bin/bash') \ | Mapa (*linia: linia [0]) \ | Xargs Echo 
Wymień powłoki użytkowników

CAT jest wykonywalny Linux. Czyta /etc/passwd, a Marcel prowadzi swoją zawartość poniżej mapy operatora Marcel.

Argument na mapie w nawiasach jest funkcją Pythona, która dzieli linie na : separatory, dając 7-tury. A wybierać jest operatorem Marcela, którego argumentem jest funkcja Pythona, identyfikująca te krotki, w których jest ostatnie pole /bin/bash.

Następny operator, kolejna mapa utrzymuje pole nazwy użytkownika każdego krotki wejściowej. Wreszcie, Xargs Echo łączy przychodzące nazwy użytkowników w jedną linię, która jest drukowana na stdout.

Skrypty w Marcel Shell

Chwila Pyton czasami jest uważany za język scenariusza, w tym celu nie działa dobrze. Problem polega na tym, że uruchamianie poleceń powłoki i inne elementy wykonywalne z Pythona są uciążliwe. Możesz użyć OS.system(), co jest proste, ale często nieodpowiednie do radzenia sobie ze stdinem, stdout i stdderr. podproces.Popen () jest silniejszy, ale bardziej złożony w użyciu.

Podejście Marcela polega na zapewnieniu modułu, który integruje operatorów Marcela z cechami językowymi Pythona. Aby ponownie odwiedzić wcześniejszy przykład, oto kod Pythona do obliczania suma wielkości plików za pomocą rozszerzenia:

od Marcela.Import API * dla ext, rozmiar w (ls (plik = true, rekursive = true) | mapa (lambda f: (f.Sufiks, f.rozmiar)) | czerwony('.','+')): print (f' ext: size) 

Polecenia powłoki są takie same jak poprzednio, z wyjątkiem konwencji składniowych. Więc ls -fr przemienia się w LS (plik = true, Recursive = True). Mapa i czerwone operatorzy są też połączone z rurami, jak w wersji Shell. Całe polecenie Shell (LS… czerwony) daje iterator Python, aby polecenie mogło być używane z Pythonem dla pętli.

Dostęp do bazy danych z Marcel Shell

Możesz zintegrować dostęp do bazy danych z Marcel Pipelines. Najpierw musisz skonfigurować dostęp do bazy danych w pliku konfiguracyjnym, ~/.Marcel.py, mi.G.

define_db (name = „jao”, durn = "pSYCOPG2", dbname = "acme", user = "jao") db_default = „Jao ' 

To konfiguruje dostęp do Postgres Baza danych o nazwie kulminacja, używając Psycopg2 kierowca. Połączenia z Marcela zostaną wykonane za pomocą Jao Użytkownik, a profil bazy danych jest nazwany Jao. (Db_default określa Jao Profil bazy danych jako ten, który należy użyć, jeśli nie jest określony profil.) Po zakończeniu tej konfiguracji baza danych można teraz zapytać za pomocą operatora SQL, e.G.

SQL 'SELECT PART_NAME, Ilość z części, gdzie ilość < 10' \ | out --csv --file ~/reorder.csv 

To polecenie pyta tabela o nazwie część, i zrzuca wynik zapytania do pliku ~/kolejność.CSV, W formacie CSV.

Zdalny dostęp z Marcel Shell

Podobnie jak dostęp do bazy danych, dostęp zdalny można skonfigurować ~/.Marcel.py. Na przykład konfiguruje to klaster 4-węzłów:

define_remote (name = „lab”, user = "Frankenstein", tożsamość = "/home/frankenstein/.ssh/id_rsa ", host = ['10.0.0.100 ', '10.0.0.101 ', '10.0.0.102 ', '10.0.0.103 ']) 

Klaster można zidentyfikować jako laboratorium W poleceniach Marcel. Parametry użytkownika i tożsamości określają informacje o logowaniu, a gospodarz Parametr określa adresy IP węzłów w klastrze.

Po skonfigurowaniu klastra wszystkie węzły mogą być obsługiwane jednocześnie. Na przykład, aby uzyskać listę procesu pids i wiersze poleceń w klastrze:

@Lab [ps | mapa (proc: (proc.Pid, Proc.wiersz poleceń))] 

Zwraca to strumień (adres IP, PID, wiersz poleceń).

Po więcej informacji odwiedź:

  • https: // www.Marceltheshell.org/
  • https: // github.com/Geophile/Marcel

Marcel jest całkiem nowy i aktywny rozwój. Skontaktuj się, jeśli chcesz pomóc.