Marcel - Un caparazón más moderno para Linux

Marcel - Un caparazón más moderno para Linux

Marcel es un nuevo caparazón. Es similar a las conchas tradicionales de muchas maneras, pero hace algunas cosas de manera diferente:

  • Tubería: Todas las shells usan tuberías para enviar un texto desde la salida de un comando a la entrada de otro. Datos estructurados de Marcel Pipes en lugar de cadenas.
  • Pitón: Marcel se implementa en Python y expone Python de varias maneras. Si necesita un poco de lógica en sus comandos, Marcel le permite expresarlo en Python.
  • Scripting: Marcel adopta un enfoque inusual para las secuencias de comandos. Puede, por supuesto, simplemente escribir una secuencia de comandos Marcel en un archivo de texto y ejecutarlos. Pero Marcel también proporciona una API en forma de un módulo Python. Puede importar este módulo para hacer secuencias de comandos de Python de una manera mucho más conveniente de lo que es posible con Python simple.

Marcel tiene licencia bajo GPLV3.

Instalación de Marcel Modern Shell en Linux

Marcel requiere Python 3.6 o después. Se ha desarrollado y probado en Linux, y funciona principalmente en Mac OS. (Si desea ayudar a puerto a Windows, o para arreglar el Mac OS Deficiencias, póngase en contacto.)

Instalar Marcel Para su propio uso:

# python3 -m pip instalar marcel 

O si desea instalar para todos los usuarios (e.gramo., a /usr/local)

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

Una vez que haya instalado Marcel, Verifique que funcione ejecutando el comando Marcel, y luego en el Marcel aviso, ejecute el versión dominio:

$ Marcel 
Verifique la versión de Marcel Shell

Personalización de Marcel Shell

Puedes personalizar Marcel en el archivo ~/.Marcel.py, que se lee en el inicio (y vuelve a leer cuando se modifica). Como puede ver desde el nombre del archivo, la personalización de Marcel se realiza en Python.

Una cosa que probablemente quieras hacer es personalizar el aviso. Para hacer esto, asigna una lista al INMEDIATO variable. Por ejemplo, si desea que su mensaje sea el directorio actual, impreso en verde, seguido de > Impreso en azul:

Pronto = [color (0, 4, 0), lambda: pwd, color (0, 2, 5), '>'] 

El mensaje resultante se ve así:

Cambiar el color indicador de shell Marcel

Esto reemplaza el inescrutable PS1 Configuración que necesitaría hacer en Bash. Color (0, 4, 0) especifica verde, (Los argumentos son RGB valores, en el rango 0-5). PWD es la variable de entorno que representa su directorio actual y prefijo esta variable con Lambda: genera una función, evaluada cada vez que se muestra el aviso.

El ~/.Marcel.py También puede importar módulos de pitón. mi.gramo., Si desea utilizar las funciones del módulo de matemáticas en sus comandos Marcel:

de la importación de matemáticas * 

Una vez que haya hecho esto, puede consultar símbolos de ese módulo, e.gramo. Pi:

Símbolos Marcel Shell

Tenga en cuenta que Pi está en paréntesis. En general, Marcel Utiliza paréntesis para delimitar las expresiones de Python. Entonces (Pi) evalúa la expresión de Python que recupera el valor de la variable Pi. También puede acceder a las variables de entorno tradicional de esta manera, e.gramo. (USUARIO) y (HOGAR), o cualquier expresión de pitón válida que dependa de símbolos en el espacio de nombres de Marcel.

Y puedes, por supuesto, definir tus propios símbolos. Por ejemplo, si pone esta definición de función en ~/.Marcel.py:

Def factorial (n): f = 1 para i en el rango (1, n + 1): f *= i devuelve f 

Luego puede usar la función factorial en la línea de comando, e.gramo.

Crear símbolos propios en Marcel

Ejemplos de Marcel Shell

Aquí, aprenderemos algunos ejemplos de comandos en Marcel Shell.

Buscar tamaños de archivo por extensión

Explore el directorio actual de manera recursiva, agrupe los archivos por su extensión (e.gramo. .TXT, .py y así sucesivamente), y calcule el tamaño total del archivo para cada grupo.

Puedes hacer esto en Marcel de la siguiente manera:

Buscar tamaños de archivo por extensión

El operador LS produce una secuencia de objetos de archivo (-fría significa visitar directorios recursivamente y devolver solo archivos).

El Archivo Los objetos están conectados al siguiente comando, mapa. El mapa Especifica una función de pitón, en los paréntesis más externos, que mapea cada archivo a una tupla que contiene la extensión del archivo, y su tamaño. (Marcel permite omitir la palabra clave Lambda.)

El rojo (Reduce) Operador, grupos en la primera parte de la tupla (extensión) y luego resume los tamaños dentro de cada grupo. El resultado se clasifica por extensión.

Ejecutables de anfitrión y la tubería Marcel

Tuberías puede contener una mezcla de operadores de Marcel y ejecutables de host. Los operadores de tubos de tubos, pero en los límites de operador/ejecutable, las cadenas de tuberías de Marcel.

Por ejemplo, este comando combina operadores y ejecutables y enumera los nombres de usuario de los usuarios cuyo shell es /bin/bash.

$ cat /etc /passwd \ | Mapa (línea: línea.Split (':')) \ | Seleccione (*línea: línea [-1] == '/bin/bash') \ | mapa (*línea: línea [0]) \ | Xargs Echo 
Lista de conchas de usuario

CAT es un ejecutable de Linux. Se lee /etc/passwd, y Marcel tuve su contenido aguas abajo en el mapa del operador de Marcel.

El argumento entre paréntesis para mapear es una función de pitón que divide las líneas en el : separadores, produciendo 7-tuplas. A seleccionar es un operador de Marcel cuyo argumento es una función de pitón que identifica las tuplas en las que es el último campo /bin/bash.

El siguiente operador, otro mapa mantiene el campo de nombre de usuario de cada tupla de entrada. Finalmente, Xargs Echo Combina los nombres de usuario entrantes en una sola línea, que se imprime a Stdout.

Scripting en Marcel Shell

Mientras Pitón a veces se considera un lenguaje de secuencias de comandos, en realidad no funciona bien para ese propósito. El problema es que ejecutar comandos de shell y otros ejecutables de Python es engorroso. Puedes usar sistema operativo.sistema(), que es simple pero a menudo inadecuado para tratar con Stdin, Stdout y Stderr. subproceso.Popen () es más poderoso pero más complejo de usar.

El enfoque de Marcel es proporcionar un módulo que integre los operadores de Marcel con las características del idioma de Python. Para volver a visitar un ejemplo anterior, aquí está el código Python para calcular la suma de los tamaños de archivo por extensión:

de Marcel.API Import * para ext, tamaño en (ls (file = true, recursive = true) | map (lambda f: (f.sufijo, F.tamaño)) | rojo('.','+')): print (f' ext: size) 

Los comandos de shell son los mismos que antes, a excepción de las convenciones sintácticas. Entonces LS -FR se convierte en ls (archivo = true, recursivo = verdadero). El mapa y los operadores rojos también están allí, conectados con tuberías, como en la versión de shell. Todo el comando shell (ls ... rojo) produce un iterador de Python para que el comando se pueda usar con Python para un bucle.

Acceso a la base de datos con Marcel Shell

Puede integrar el acceso a la base de datos con Marcel Pipelines. Primero, debe configurar el acceso a la base de datos en el archivo de configuración, ~/.Marcel.py, mi.gramo.

Define_db (name = 'jao', controlador = "PSYCOPG2", dbname = "acme", user = "jao") db_default = 'jao' 

Esto configura el acceso a un Post -put base de datos con nombre cumbre, utilizando el psycopg2 conductor. Las conexiones de Marcel se realizarán utilizando el jao usuario, y se nombra el perfil de la base de datos jao. (Db_default especifica el jao Perfil de la base de datos como el que se utilizará si no se especifica ningún perfil.) Con esta configuración realizada, la base de datos ahora se puede consultar utilizando el operador SQL, E.gramo.

SQL 'seleccionar Part_name, cantidad de parte donde la cantidad < 10' \ | out --csv --file ~/reorder.csv 

Este comando consulta una tabla llamada parte, y descarta el resultado de la consulta en el archivo ~/reordenar.CSV, en formato CSV.

Acceso remoto con Marcel Shell

De manera similar al acceso a la base de datos, el acceso remoto se puede configurar en ~/.Marcel.py. Por ejemplo, esto configura un clúster de 4 nodos:

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

El clúster se puede identificar como un laboratorio En los comandos de Marcel. Los parámetros de usuario y de identidad especifican la información de inicio de sesión y el anfitrión El parámetro especifica las direcciones IP de los nodos en el clúster.

Una vez que se configura el clúster, todos los nodos se pueden operar a la vez. Por ejemplo, para obtener una lista de proceso pids y líneas de comando a través del clúster:

@Lab [PS | Mapa (Proc: (Proc.Pid, Proc.línea de comando))] 

Esto devuelve una secuencia de (dirección IP, PID, línea de comando) tuplas.

Para más información visite:

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

Marcel es bastante nuevo y bajo desarrollo activo. Póngase en contacto si desea ayudar.