Marcel - Shell yang lebih moden untuk Linux

Marcel - Shell yang lebih moden untuk Linux

Marcel adalah cangkang baru. Ia sama dengan kerang tradisional dalam pelbagai cara, tetapi ia melakukan beberapa perkara yang berbeza:

  • Paip: Semua kerang menggunakan paip untuk menghantar teks dari output satu arahan kepada input yang lain. Marcel Pipes berstruktur data bukan rentetan.
  • Python: Marcel dilaksanakan di Python, dan mendedahkan Python dalam beberapa cara. Sekiranya anda memerlukan sedikit logik dalam arahan anda, Marcel membolehkan anda menyatakannya di Python.
  • Skrip: Marcel mengambil pendekatan yang luar biasa untuk skrip. Anda boleh, tentu saja, hanya menulis urutan perintah Marcel dalam fail teks dan melaksanakannya. Tetapi Marcel juga menyediakan API dalam bentuk modul Python. Anda boleh mengimport modul ini untuk melakukan skrip python dengan cara yang jauh lebih mudah daripada yang mungkin dengan python biasa.

Marcel dilesenkan di bawah Gplv3.

Memasang Marcel Modern Shell di Linux

Marcel memerlukan Python 3.6 atau kemudian. Ia telah dibangunkan dan diuji di Linux, dan kebanyakannya berfungsi macOS. (Sekiranya anda ingin membantu pelabuhan Tingkap, atau untuk memperbaiki macOS kekurangan, berhubung.)

Untuk memasang Marcel untuk kegunaan anda sendiri:

# python3 -m pip memasang marcel 

Atau jika anda mahu memasang untuk semua pengguna (e.g., ke /usr/tempatan):

$ sudo python3 -m pip pemasangan --prefix /usr /marcel tempatan 

Sebaik sahaja anda memasang Marcel, periksa bahawa ia berfungsi dengan menjalankan arahan Marcel, Dan kemudian di Marcel segera, jalankan versi Perintah:

$ Marcel 
Semak versi Shell Marcel

Penyesuaian Marcel Shell

Anda boleh menyesuaikan Marcel dalam fail ~/.Marcel.py, yang dibaca pada permulaan, (dan baca semula apabila diubahsuai). Seperti yang anda boleh katakan dari nama fail, penyesuaian Marcel dilakukan di Python.

Satu perkara yang mungkin anda mahu lakukan ialah menyesuaikan arahan. Untuk melakukan ini, anda memberikan senarai ke Segera pembolehubah. Contohnya, jika anda mahu arahan anda menjadi direktori semasa, dicetak dalam warna hijau, diikuti oleh > Dicetak dengan warna biru:

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

Gegaran yang dihasilkan kelihatan seperti ini:

Tukar warna cepat Marcel Shell

Ini menggantikan yang tidak dapat disangkal PS1 konfigurasi yang perlu anda lakukan di bash. Warna (0, 4, 0) Menentukan Hijau, (Argumennya Rgb nilai, dalam julat 0-5). PWD adalah pemboleh ubah persekitaran yang mewakili direktori semasa anda dan awalan pembolehubah ini dengan Lambda: menjana fungsi, dinilai setiap kali prompt dipaparkan.

The ~/.Marcel.py boleh juga mengimport modul python. E.g., Jika anda ingin menggunakan fungsi modul matematik dalam perintah Marcel anda:

dari import matematik * 

Sebaik sahaja anda telah melakukan ini, anda boleh merujuk simbol dari modul itu, e.g. pi:

Simbol shell Marcel

Perhatikan bahawa pi adalah tanda kurung. Secara umum, Marcel Menggunakan kurungan untuk membatalkan ekspresi python. Jadi (pi) menilai ungkapan python yang mengambil nilai pembolehubah pi. Anda juga boleh mengakses pembolehubah persekitaran tradisional dengan cara ini, e.g. (Pengguna) dan (Rumah), atau ekspresi python yang sah bergantung pada simbol di ruang nama Marcel.

Dan anda boleh, tentu saja, menentukan simbol anda sendiri. Contohnya, jika anda meletakkan definisi fungsi ini dalam ~/.Marcel.py:

def factorial (n): f = 1 untuk i dalam julat (1, n + 1): f *= saya kembali f 

Kemudian anda boleh menggunakan fungsi faktorial pada baris arahan, e.g.

Buat simbol sendiri di Marcel

Contoh Marcel Shell

Di sini, kita akan mempelajari beberapa contoh arahan di Marcel Shell.

Cari saiz fail dengan lanjutan

Terokai direktori semasa secara rekursif, kumpulan fail dengan lanjutan mereka (e.g. .txt, .py dan sebagainya), dan hitung jumlah saiz fail untuk setiap kumpulan.

Anda boleh melakukan ini di Marcel seperti berikut:

Cari saiz fail dengan lanjutan

Operator LS menghasilkan aliran objek fail, (-fr bermaksud lawatan direktori secara rekursif, dan mengembalikan fail sahaja).

The Fail Objek disalurkan ke arahan seterusnya, peta. The peta Menentukan fungsi python, dalam kurungan paling luar, yang memetakan setiap fail ke tuple yang mengandungi lanjutan fail, dan saiznya. (Marcel membenarkan kata kunci Lambda ditinggalkan.)

The Merah (Mengurangkan) pengendali, kumpulan oleh bahagian pertama tuple (sambungan) dan kemudian meringkaskan saiz dalam setiap kumpulan. Hasilnya disusun mengikut lanjutan.

Hos Executable dan Marcel Pipeline

Saluran paip mungkin mengandungi campuran pengendali Marcel dan eksekutif tuan rumah. Objek paip pengendali, tetapi di sempadan pengendali/boleh dilaksanakan, rentetan paip Marcel.

Sebagai contoh, arahan ini menggabungkan pengendali dan executable dan menyenaraikan nama pengguna pengguna yang cangkangnya /bin/bash.

$ CAT /ETC /PASSWD \ | peta (baris: baris.Split (':')) \ | pilih (*baris: baris [-1] == '/bin/bash') \ | peta (*baris: baris [0]) \ | Xargs Echo 
Senaraikan kerang pengguna

Kucing adalah Linux Executable. Ia berbunyi /etc/passwd, dan Marcel Pipes kandungannya ke hilir ke peta pengendali Marcel.

Hujah kurungan ke peta adalah fungsi python yang memisahkan garis di : pemisah, menghasilkan 7 tuples. A pilih adalah pengendali Marcel yang hujahnya adalah fungsi python yang mengenal pasti tuples di mana medan terakhir adalah /bin/bash.

Pengendali seterusnya, peta lain menyimpan medan nama pengguna setiap tuple input. Akhirnya, Xargs Echo Menggabungkan nama pengguna yang masuk ke dalam satu baris, yang dicetak ke stdout.

Skrip di Marcel Shell

Manakala Python kadang -kadang dianggap sebagai bahasa skrip, ia sebenarnya tidak berfungsi dengan baik untuk tujuan itu. Masalahnya ialah arahan shell yang menjalankan, dan executable lain dari Python adalah rumit. Anda boleh menggunakan OS.sistem (), yang mudah tetapi sering tidak mencukupi untuk berurusan dengan stdin, stdout, dan stderr. subprocess.Popen () lebih kuat tetapi lebih kompleks digunakan.

Pendekatan Marcel adalah untuk menyediakan modul yang mengintegrasikan pengendali Marcel dengan ciri bahasa Python. Untuk mengkaji semula contoh terdahulu, inilah kod python untuk mengira jumlah saiz fail dengan lanjutan:

dari Marcel.Import API * untuk ext, saiz dalam (ls (file = true, recursif = true) | Map (lambda f: (f.akhiran, f.saiz)) | merah ('.','+')): cetak (f' ext: size) 

Perintah shell adalah sama seperti sebelumnya, kecuali konvensyen sintaksis. Jadi ls -fr menjadi ls (fail = benar, rekursif = benar). Peta dan pengendali merah juga ada, dihubungkan dengan paip, seperti dalam versi shell. Keseluruhan perintah shell (LS ... merah) menghasilkan iterator python supaya perintah itu dapat digunakan dengan python untuk gelung.

Akses pangkalan data dengan Marcel Shell

Anda boleh mengintegrasikan akses pangkalan data dengan saluran paip Marcel. Pertama, anda perlu mengkonfigurasi akses pangkalan data dalam fail konfigurasi, ~/.Marcel.py, e.g.

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

Ini mengkonfigurasi akses ke a Postgres pangkalan data yang dinamakan acme, menggunakan psycopg2 pemandu. Sambungan dari Marcel akan dibuat menggunakan Jao pengguna, dan profil pangkalan data dinamakan Jao. (Db_default menentukan Jao profil pangkalan data sebagai yang akan digunakan jika tiada profil ditentukan.) Dengan konfigurasi ini dilakukan, pangkalan data kini boleh dipersoalkan menggunakan pengendali SQL, e.g.

sql 'pilih part_name, kuantiti dari bahagian di mana kuantiti < 10' \ | out --csv --file ~/reorder.csv 

Perintah ini menanyakan jadual yang dinamakan bahagian, dan membuang hasil pertanyaan ke dalam fail ~/menyusun semula.CSV, Dalam format CSV.

Akses Jauh dengan Marcel Shell

Begitu juga dengan akses pangkalan data, akses jauh dapat dikonfigurasikan dalam ~/.Marcel.py. Sebagai contoh, ini mengkonfigurasi kluster 4-nod:

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

Kelompok boleh dikenal pasti sebagai makmal Dalam perintah Marcel. Parameter pengguna dan identiti menentukan maklumat log masuk, dan Tuan rumah Parameter Menentukan alamat IP nod pada kelompok.

Setelah kelompok dikonfigurasikan, semua nod boleh dikendalikan sekaligus. Contohnya, untuk mendapatkan senarai proses PIDS dan baris arahan di seluruh kluster:

@lab [PS | peta (Proc: (Proc.PID, Proc.commandline)] 

Ini mengembalikan aliran (alamat IP, PID, baris arahan).

Untuk maklumat lanjut, lawati:

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

Marcel cukup baru dan dalam perkembangan aktif. Berhubung jika anda ingin membantu.