Marcel - eine modernere Shell für Linux

Marcel - eine modernere Shell für Linux

Marcel ist eine neue Hülle. Es ähnelt in vielerlei Hinsicht traditionellen Muscheln, aber es macht ein paar Dinge anders:

  • Rohrleitungen: Alle Shells senden Rohre, um einen Text aus der Ausgabe eines Befehls an die Eingabe eines anderen zu senden. Marcel Pipes strukturierte Daten anstelle von Strings.
  • Python: Marcel ist in Python implementiert und enthüllt Python auf verschiedene Weise. Wenn Sie in Ihren Befehlen ein bisschen Logik benötigen, können Sie es in Marcel in Python ausdrücken.
  • Scripting: Marcel verfolgt einen ungewöhnlichen Ansatz zum Skripten. Sie können natürlich einfach eine Abfolge von Marcel -Befehlen in einer Textdatei schreiben und sie ausführen. Marcel bietet aber auch eine API in Form eines Python -Moduls. Sie können dieses Modul so importieren, um Python -Skripte auf weitaus bequemere Weise zu machen, als es mit einfachem Python möglich ist.

Marcel ist unter lizenziert GPLV3.

Installieren Sie Marcel Modern Shell unter Linux

Marcel verlangt Python 3.6 oder später. Es wurde auf Linux entwickelt und getestet und funktioniert meistens an Mac OS. (Wenn Sie den Port zu helfen möchten, um zu Port zu helfen Fenster, oder um die zu reparieren Mac OS Mängel, melden Sie sich.)

Installieren Marcel Für Ihre eigene Verwendung:

# python3 -m pip install marcel 

Oder wenn Sie für alle Benutzer installieren möchten (e.G., Zu /usr/lokal):

$ sudo python3 -m PIP Installation -Prefix /usr /Local Marcel 

Sobald Sie installiert haben Marcel, Überprüfen Sie, ob es funktioniert, indem der Befehl ausgeführt wird Marcel, und dann am Marcel auffordern, die ausführen Ausführung Befehl:

$ marcel 
Überprüfen Sie die Marcel Shell -Version

Anpassung von Marcel Shell

Sie können anpassen Marcel in der Datei ~/.Marcel.py, Das wird beim Start gelesen (und bei der Änderung neu gelesen). Wie Sie aus dem Namen der Datei erkennen können, erfolgt die Anpassung von Marcel in Python.

Eine Sache, die Sie wahrscheinlich tun möchten, ist, die Eingabeaufforderung anzupassen. Zu diesem Zweck weisen Sie der eine Liste zu PROMPT Variable. Wenn Sie beispielsweise möchten, dass Ihre Eingabeaufforderung das aktuelle Verzeichnis ist, gedruckt in Grün, gefolgt von > in blau gedruckt:

Eingabeaufforderung = [Farbe (0, 4, 0), Lambda: PWD, Farbe (0, 2, 5), '>'] 

Die resultierende Eingabeaufforderung sieht so aus:

Ändern Sie Marcel Shell -Eingabeaufforderung Farbe

Dies ersetzt die unergründlichen PS1 Konfiguration, die Sie in Bash tun müssen. Farbe (0, 4, 0) an Grün, (Die Argumente sind RGB Werte im Bereich 0-5). PWD ist die Umgebungsvariable, die Ihr aktuelles Verzeichnis darstellt, und das Präfix dieser Variablen mit Lambda: generiert eine Funktion, die jedes Mal bewertet wird, wenn die Eingabeaufforderung angezeigt wird.

Der ~/.Marcel.py kann auch Python -Module importieren. E.G., Wenn Sie die Funktionen des Mathematikmoduls in Ihren Marcel -Befehlen verwenden möchten:

vom Mathematikimport * 

Sobald Sie dies getan haben, können Sie sich auf Symbole aus diesem Modul beziehen, e.G. Pi:

Marcel Shell -Symbole

Beachten Sie, dass Pi ist Klammern. Allgemein, Marcel Verwendet Klammern, um Python -Ausdrücke abzugrenzen. So (Pi) bewertet den Python -Ausdruck, der den Wert der Variablen abruft Pi. Sie können auf diese Weise auch auf traditionelle Umgebungsvariablen zugreifen, e.G. (BENUTZER) Und (HEIM), oder ein gültiger Python -Ausdruck, der sich auf Symbole in Marcels Namespace stützt.

Und Sie können natürlich Ihre eigenen Symbole definieren. Zum Beispiel, wenn Sie diese Funktionsdefinition in einsetzen ~/.Marcel.py:

Def Factorial (n): f = 1 für i im Bereich (1, n + 1): f *= i return f 

Dann können Sie die faktorielle Funktion in der Befehlszeile verwenden, e.G.

Erstellen Sie eigene Symbole in Marcel

Marcel Shell -Beispiele

Hier lernen wir einige Beispiele für Befehle in der Marcel Shell lernen.

Finden Sie nach Erweiterung Dateigrößen

Erkunden Sie das aktuelle Verzeichnis rekursiv und gruppieren Sie die Dateien nach ihrer Erweiterung (e.G. .txt, .py und so weiter) und berechnen Sie die Gesamtdateigröße für jede Gruppe.

Sie können dies in Marcel wie folgt tun:

Finden Sie nach Erweiterung Dateigrößen

Der LS -Operator erstellt einen Strom von Dateiobjekten ((-fr bedeutet rekursiv Besuche und zurückgeben nur Dateien).

Der Datei Objekte werden zum nächsten Befehl geleitet, Karte. Der Karte Gibt eine Python -Funktion in den äußersten Klammern an, die jede Datei einem Tupel, das die Erweiterung der Datei enthält. (Marcel ermöglicht das Lambda -Schlüsselwort weggelassen werden.)

Der Rot (Reduzieren) Operator, Gruppen nach dem ersten Teil des Tupels (Verlängerung) und dann die Größen innerhalb jeder Gruppe zusammenfassen. Das Ergebnis ist nach Erweiterung sortiert.

Host Executables und die Marcel Pipeline

Pipelines Kann eine Mischung aus Marcel -Operatoren und Host -Executables enthalten. Operatoren Rohrobjekte, jedoch an den Grenzen des Bedieners/an den ausführbaren Grenzen, stattdessen Marcel Pipes -Zeichenfolgen.

Beispiel /Bin/Bash.

$ cat /etc /passwd \ | Karte (Zeile: Zeile.Split (':') \ | select (*Zeile: Zeile [-1] == '/bin/bash') \ | Karte (*Zeile: Zeile [0]) \ | Xargs Echo 
Listen Sie Benutzerschalen auf

Katze ist eine Linux -ausführbare Datei. Es liest /etc/passwd, und Marcel verpflichten seinen Inhalt stromabwärts zur Marcel -Operator -Karte.

Das Klammern Argument zur Karte ist eine Python -Funktion, die die Linien am Teil der Leitungen spaltet : Abschlüsse, die 7-Tupel ergeben. A wählen ist ein Marcel -Operator, dessen Argument eine Python -Funktion ist, die die Tupel identifiziert, in denen sich das letzte Feld befindet /Bin/Bash.

Der nächste Operator, eine andere Karte, behält das Benutzernamefeld jedes Eingangstuple bei. Endlich, Xargs Echo kombiniert die eingehenden Benutzernamen zu einer einzelnen Zeile, die in STDOut gedruckt ist.

Scripting in Marcel Shell

Während Python wird manchmal als eine Skriptsprache angesehen, es funktioniert eigentlich nicht gut für diesen Zweck. Das Problem ist, dass das Ausführen von Shell -Befehlen und andere ausführbare Ausführungsfähigkeiten von Python umständlich sind. Sie können verwenden Betriebssystem.System(), Das ist einfach, aber oft unzureichend für den Umgang mit Stdin, Stdout und Stderr. Subprozess.Popen () ist leistungsfähiger, aber komplexer zu bedienen.

Marcels Ansatz ist es, ein Modul bereitzustellen, das Marcel -Operatoren in die Sprachfunktionen von Python integriert. Um ein früheres Beispiel zu überdenken, finden Sie hier den Python -Code für die Berechnung der Summe der Dateigrößen nach Erweiterung:

Von Marcel.API -Import * für ext, Größe in (ls (Datei = true, rekursiv = true) | Karte (Lambda f: (f).Suffix, f.Größe)) | Rot('.','+')): print (f' ext: size) 

Die Shell -Befehle sind die gleichen wie zuvor, mit Ausnahme von syntaktischen Konventionen. So ls -fr verwandelt sich in ls (Datei = true, rekursiv = wahr). Die Karte und die roten Operatoren sind auch da, wie in der Shell -Version mit Rohren verbunden. Der gesamte Shell -Befehl (ls… rot) ergibt einen Python -Iterator, damit der Befehl mit Python für eine Schleife verwendet werden kann.

Datenbankzugriff mit Marcel Shell

Sie können den Datenbankzugriff in Marcel Pipelines integrieren. Zuerst müssen Sie den Datenbankzugriff in der Konfigurationsdatei konfigurieren, ~/.Marcel.py, e.G.

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

Dies konfiguriert den Zugriff auf a Postgres Datenbank benannt Gipfel, Verwendung der psycopg2 Treiber. Verbindungen von Marcel werden mit dem hergestellt Jao Benutzer, und das Datenbankprofil wird benannt Jao. (Db_default gibt die an Jao Datenbankprofil als das, das verwendet wird, wenn kein Profil angegeben ist.) Mit dieser Konfiguration kann die Datenbank jetzt mit dem SQL -Operator e abgefragt werden.G.

SQL 'Wählen < 10' \ | out --csv --file ~/reorder.csv 

Dieser Befehl fragt eine Tabelle mit dem Namen Teil, und füllt das Abfrageergebnis in die Datei ~/reordieren.CSV, im CSV -Format.

Fernzugriff mit Marcel Shell

Ähnlich wie bei Datenbankzugriff kann der Remote -Zugriff in konfiguriert werden in ~/.Marcel.py. Dies konfiguriert beispielsweise einen 4-Knoten-Cluster:

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

Der Cluster kann als identifiziert werden ein Labor In Marcel -Befehlen. Die Benutzer- und Identitätsparameter geben Anmeldeinformationen an und die Gastgeber Der Parameter gibt die IP -Adressen der Knoten auf dem Cluster an.

Sobald der Cluster konfiguriert ist, können alle Knoten gleichzeitig betrieben werden. Zum Beispiel, um eine Liste von Prozessen zu erhalten Pids und Befehlszeilen über den Cluster:

@lab [PS | Karte (Proc: (Proc ".PID, Proc.Befehlszeile))] 

Dies gibt einen Strom von (IP -Adresse, PID, Befehlszeile) Tupeln zurück.

Für weitere Informationen besuchen Sie:

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

Marcel ist ziemlich neu und unter aktiver Entwicklung. Machen Sie sich mit Kontakt, wenn Sie helfen möchten.