Marcel - Shell yang lebih modern untuk Linux

Marcel - Shell yang lebih modern untuk Linux

Marcel adalah cangkang baru. Ini mirip dengan cangkang tradisional dalam banyak hal, tetapi melakukan beberapa hal secara berbeda:

  • Perpipaan: Semua shell menggunakan pipa untuk mengirim teks dari output satu perintah ke input lain. Pipa Marcel Data terstruktur, bukan string.
  • Python: Marcel diimplementasikan dalam Python, dan memaparkan Python dalam beberapa cara. Jika Anda membutuhkan sedikit logika dalam perintah Anda, Marcel memungkinkan Anda untuk mengekspresikannya dalam Python.
  • Scripting: Marcel mengambil pendekatan yang tidak biasa untuk skrip. Anda dapat, tentu saja, cukup menulis urutan perintah Marcel dalam file teks dan menjalankannya. Tapi Marcel juga menyediakan API dalam bentuk modul Python. Anda dapat mengimpor modul ini untuk melakukan scripting python dengan cara yang jauh lebih nyaman daripada yang dimungkinkan dengan python polos.

Marcel dilisensikan di bawah Gplv3.

Menginstal Marcel Modern Shell di Linux

Marcel membutuhkan Python 3.6 atau nanti. Itu telah dikembangkan dan diuji di Linux, dan sebagian besar bekerja MacOS. (Jika Anda ingin membantu port ke Windows, atau untuk memperbaiki MacOS kekurangan, hubungi.)

Untuk memasang Marcel untuk penggunaan Anda sendiri:

# python3 -m pip instal marcel 

Atau jika Anda ingin menginstal semua pengguna (e.G., ke /usr/lokal):

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

Setelah Anda menginstal Marcel, Periksa apakah itu berfungsi dengan menjalankan perintah Marcel, dan kemudian di Marcel cepat, jalankan Versi: kapan memerintah:

$ Marcel 
Periksa Versi Marcel Shell

Kustomisasi Marcel Shell

Anda dapat menyesuaikan Marcel di file ~/.Marcel.py, yang dibaca pada startup, (dan baca kembali saat dimodifikasi). Seperti yang dapat Anda ketahui dari nama file, kustomisasi Marcel selesai di Python.

Satu hal yang mungkin ingin Anda lakukan adalah menyesuaikan prompt. Untuk melakukan ini, Anda menetapkan daftar ke MENGINGATKAN variabel. Misalnya, jika Anda ingin prompt Anda menjadi direktori saat ini, dicetak berwarna hijau, diikuti oleh > Dicetak dengan warna biru:

Prompt = [warna (0, 4, 0), lambda: pwd, warna (0, 2, 5), '>'] 

Prompt yang dihasilkan terlihat seperti ini:

Ubah Warna Prompt Marcel Shell

Ini menggantikan yang tidak dapat dipahami PS1 konfigurasi yang perlu Anda lakukan di bash. Warna (0, 4, 0) Menentukan hijau, (Argumennya RGB nilai, dalam kisaran 0-5). PWD adalah variabel lingkungan yang mewakili direktori Anda saat ini dan awalan variabel ini dengan Lambda: menghasilkan fungsi, dievaluasi setiap kali prompt ditampilkan.

Itu ~/.Marcel.py juga dapat mengimpor modul python. E.G., Jika Anda ingin menggunakan fungsi modul matematika di perintah Marcel Anda:

dari matematika impor * 

Setelah Anda melakukan ini, Anda dapat merujuk ke simbol dari modul itu, e.G. pi:

Simbol marcel shell

Perhatikan itu pi diarahkan. Secara umum, Marcel menggunakan tanda kurung untuk membatasi ekspresi Python. Jadi (pi) mengevaluasi ekspresi python yang mengambil nilai variabel pi. Anda juga dapat mengakses variabel lingkungan tradisional dengan cara ini, e.G. (PENGGUNA) Dan (RUMAH), atau ekspresi python yang valid yang mengandalkan simbol di namespace Marcel.

Dan Anda dapat, tentu saja, menentukan simbol Anda sendiri. Misalnya, jika Anda memasukkan definisi fungsi ini ~/.Marcel.py:

Def factorial (n): f = 1 untuk i dalam kisaran (1, n + 1): f *= i return f 

Kemudian Anda dapat menggunakan fungsi faktorial pada baris perintah, e.G.

Buat simbol sendiri di Marcel

Contoh Marcel Shell

Di sini, kita akan mempelajari beberapa contoh perintah di marcel shell.

Temukan ukuran file berdasarkan ekstensi

Jelajahi direktori saat ini secara rekursif, grasi file berdasarkan ekstensi mereka (e.G. .txt, .py dan seterusnya), dan hitung ukuran file total untuk setiap grup.

Anda dapat melakukan ini di Marcel sebagai berikut:

Temukan ukuran file berdasarkan ekstensi

Operator LS menghasilkan aliran objek file, (-fr berarti kunjungan direktori secara rekursif, dan hanya mengembalikan file).

Itu Mengajukan objek disalurkan ke perintah berikutnya, peta. Itu peta Menentukan fungsi python, dalam tanda kurung terluar, yang memetakan setiap file ke tuple yang berisi ekstensi file, dan ukurannya. (Marcel memungkinkan kata kunci Lambda dihilangkan.)

Itu merah (mengurangi) operator, grup pada bagian pertama tuple (perpanjangan) dan kemudian jumlah ukuran dalam setiap grup. Hasilnya diurutkan berdasarkan ekstensi.

Host Executables dan Marcel Pipeline

Saluran pipa mungkin berisi campuran operator marcel dan executable host. Operator Pipa Objek, tetapi di batas operator/yang dapat dieksekusi, string pipa Marcel sebagai gantinya.

Misalnya, perintah ini menggabungkan operator dan executable dan mencantumkan nama pengguna pengguna yang shellnya /bin/bash.

$ cat /etc /passwd \ | peta (baris: baris.split (':')) \ | SELECT (*baris: baris [-1] == '/bin/bash') \ | peta (*baris: baris [0]) \ | Xargs Echo 
Daftar shell pengguna

Kucing adalah Linux yang dapat dieksekusi. Itu berbunyi /etc/passwd, dan Marcel menyalurkan isinya ke hilir ke peta operator marcel.

Argumen tanda kurung untuk memetakan adalah fungsi Python yang membagi garis pada : pemisah, menghasilkan 7-tupel. A Pilih adalah operator marcel yang argumennya merupakan fungsi Python yang mengidentifikasi tupel di mana bidang terakhir /bin/bash.

Operator berikutnya, peta lain menjaga bidang nama pengguna dari setiap tuple input. Akhirnya, Xargs Echo menggabungkan nama pengguna yang masuk ke dalam satu baris, yang dicetak ke stdout.

Scripting di Marcel Shell

Ketika Python terkadang dianggap sebagai bahasa skrip, itu sebenarnya tidak berfungsi dengan baik untuk tujuan itu. Masalahnya adalah menjalankan perintah shell, dan executable lainnya dari python rumit. Anda dapat gunakan os.sistem(), yang sederhana tetapi sering tidak memadai untuk berurusan dengan Stdin, Stdout, dan Stderr. subproses.POPEN () lebih kuat tetapi lebih kompleks untuk digunakan.

Pendekatan Marcel adalah menyediakan modul yang mengintegrasikan operator Marcel dengan fitur bahasa Python. Untuk meninjau kembali contoh sebelumnya, berikut adalah kode Python untuk menghitung jumlah ukuran file berdasarkan ekstensi:

dari Marcel.API Impor * untuk ext, size in (ls (file = true, recursive = true) | peta (lambda f: (f.akhiran, f.ukuran)) | merah('.','+'): print (f' ext: size) 

Perintah shell sama seperti sebelumnya, kecuali untuk konvensi sintaksis. Jadi ls -fr berubah menjadi ls (file = true, Rekursif = Benar). Peta dan operator merah juga ada di sana, terhubung dengan pipa, seperti dalam versi shell. Seluruh perintah shell (ls… merah) menghasilkan iterator python sehingga perintah dapat digunakan dengan python untuk loop.

Akses database dengan Marcel Shell

Anda dapat mengintegrasikan akses basis data dengan Marcel Pipelines. Pertama, Anda perlu mengonfigurasi akses database di file konfigurasi, ~/.Marcel.py, e.G.

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

Ini mengonfigurasi akses ke a Postgres Database bernama puncak, menggunakan psycopg2 pengemudi. Koneksi dari Marcel akan dibuat menggunakan Jao pengguna, dan profil database dinamai Jao. (Db_default menentukan Jao profil basis data sebagai yang akan digunakan jika tidak ada profil yang ditentukan.) Dengan konfigurasi ini selesai, database sekarang dapat ditanyai menggunakan operator SQL, e.G.

SQL 'SELECT PART_NAME, Kuantitas dari bagian di mana kuantitas < 10' \ | out --csv --file ~/reorder.csv 

Perintah ini menanyai tabel bernama bagian, dan membuang hasil kueri ke dalam file ~/ulang.CSV, dalam format CSV.

Akses jarak jauh dengan Marcel Shell

Demikian pula dengan akses database, akses jarak jauh dapat dikonfigurasi ~/.Marcel.py. Misalnya, ini mengkonfigurasi cluster 4-node:

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

Cluster dapat diidentifikasi sebagai lab dalam perintah Marcel. Parameter pengguna dan identitas menentukan informasi login, dan tuan rumah Parameter Menentukan alamat IP node pada cluster.

Setelah cluster dikonfigurasi, semua node dapat dioperasikan sekaligus. Misalnya, untuk mendapatkan daftar proses PIDS dan baris perintah melintasi cluster:

@lab [PS | peta (proc: (proc.PID, Proc.garis komando))] 

Ini mengembalikan aliran (alamat IP, pid, baris perintah) tupel.

Untuk informasi lebih lanjut, kunjungi:

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

Marcel cukup baru dan di bawah pengembangan aktif. Hubungi jika Anda ingin membantu.