Marcel - A Shell ທີ່ທັນສະ ໄໝ ສຳ ລັບ Linux


Marcel ແມ່ນຫອຍ ໃໝ່. ມັນຄ້າຍຄືກັບເປືອກຫອຍແບບດັ້ງເດີມໃນຫລາຍໆດ້ານ, ແຕ່ວ່າມັນກໍ່ເຮັດບາງຢ່າງແຕກຕ່າງກັນ:

  • ທໍ່: ທຸກໆຫອຍໃຊ້ທໍ່ສົ່ງຂໍ້ຄວາມຈາກຜົນໄດ້ຮັບຂອງ ຄຳ ສັ່ງ ໜຶ່ງ ໄປໃສ່ວັດສະດຸປ້ອນຂອງອີກ ລຳ ໜຶ່ງ. ທໍ່ Marcel ມີຂໍ້ມູນທີ່ມີໂຄງສ້າງແທນທີ່ຈະເປັນສາຍໄຟ.
  • Python: Marcel ໄດ້ຖືກຈັດຕັ້ງປະຕິບັດໃນ Python, ແລະເປີດເຜີຍ Python ໃນຫລາຍໆດ້ານ. ຖ້າທ່ານຕ້ອງການມີເຫດຜົນເລັກ ໜ້ອຍ ໃນ ຄຳ ສັ່ງຂອງທ່ານ, marcel ຊ່ວຍໃຫ້ທ່ານສາມາດສະແດງມັນໃນ Python.
  • ການຂຽນອັກສອນ: Marcel ໃຊ້ວິທີທີ່ຜິດປົກກະຕິໃນການຂຽນອັກສອນ. ແນ່ນອນທ່ານສາມາດຂຽນ ລຳ ດັບ ຄຳ ສັ່ງ marcel ໃນເອກະສານຂໍ້ຄວາມແລະປະຕິບັດ ຄຳ ສັ່ງເຫຼົ່ານັ້ນ. ແຕ່ Marcel ຍັງໃຫ້ API ໃນຮູບແບບຂອງໂມດູນ Python. ທ່ານສາມາດ ນຳ ເຂົ້າໂມດູນນີ້ເພື່ອເຮັດ Python scripting ໃນທາງທີ່ສະດວກກວ່າທີ່ເປັນໄປໄດ້ກັບ Python ທຳ ມະດາ.

Marcel ແມ່ນໄດ້ຮັບອະນຸຍາດພາຍໃຕ້ GPLv3.

ຕິດຕັ້ງ Marcel Modern Shell ໃນ Linux

Marcel ຮຽກຮ້ອງໃຫ້ Python 3.6 ຫຼືຫຼັງຈາກນັ້ນ. ມັນໄດ້ຖືກພັດທະນາແລະທົດລອງໃຊ້ໃນ Linux, ແລະມັນສ່ວນຫຼາຍແມ່ນເຮັດວຽກກ່ຽວກັບ macOS. (ຖ້າທ່ານຕ້ອງການຊ່ວຍເຫຼືອພອດເຂົ້າ Windows, ຫລືແກ້ໄຂຂໍ້ບົກຜ່ອງຂອງ macOS, ໃຫ້ຕິດຕໍ່ຫາ.)

ການຕິດຕັ້ງ marcel ສຳ ລັບການ ນຳ ໃຊ້ຂອງທ່ານ:

# python3 -m pip install marcel

ຫຼືຖ້າທ່ານຕ້ອງການຕິດຕັ້ງ ສຳ ລັບຜູ້ໃຊ້ທຸກຄົນ (ເຊັ່ນ: ໄປ /usr/local ):

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

ເມື່ອທ່ານໄດ້ຕິດຕັ້ງ marcel, ໃຫ້ກວດເບິ່ງວ່າມັນ ກຳ ລັງເຮັດວຽກໂດຍການແລ່ນ ຄຳ ສັ່ງ marcel, ແລະຫຼັງຈາກນັ້ນຢູ່ທີ່ ຄຳ ສັ່ງ marcel, ດຳ ເນີນການ ຄຳ ສັ່ງ version:

$ marcel

ການປັບແຕ່ງຂອງ Marcel Shell

ທ່ານສາມາດປັບແຕ່ງ marcel ໃນແຟ້ມເອກະສານ ~/.marcel.py , ເຊິ່ງອ່ານໃນເວລາເລີ່ມຕົ້ນ, (ແລະອ່ານຄືນ ໃໝ່ ເມື່ອຖືກດັດແກ້). ຕາມທີ່ທ່ານສາມາດບອກໄດ້ຈາກຊື່ຂອງເອກະສານ, ການປັບແຕ່ງ marcel ແມ່ນເຮັດໃນ Python.

ສິ່ງ ໜຶ່ງ ທີ່ທ່ານອາດຈະຢາກເຮັດຄືການປັບແຕ່ງການກະຕຸ້ນເຕືອນ. ເພື່ອເຮັດສິ່ງນີ້, ທ່ານມອບລາຍຊື່ໃຫ້ຕົວແປ PROMPT. ຍົກຕົວຢ່າງ, ຖ້າທ່ານຕ້ອງການໃຫ້ ຄຳ ແນະ ນຳ ຂອງທ່ານເປັນໄດເລກະທໍລີປັດຈຸບັນ, ພິມເປັນສີຂຽວ, ຕິດຕາມດ້ວຍ ພິມເປັນສີຟ້າ:

PROMPT = [
    Color(0, 4, 0),
    lambda: PWD,
    Color(0, 2, 5),
    '> '
]

ການກະຕຸ້ນເຕືອນທີ່ມີຜົນໄດ້ຮັບເບິ່ງຄືວ່ານີ້:

ສິ່ງນີ້ປ່ຽນແທນການຕັ້ງຄ່າ PS1 ທີ່ບໍ່ສາມາດກວດສອບໄດ້ເຊິ່ງທ່ານ ຈຳ ເປັນຕ້ອງເຮັດໃນ bash. ສີ (0, 4, 0) ລະບຸສີຂຽວ, (ການໂຕ້ຖຽງແມ່ນຄ່າ RGB, ໃນລະດັບ 0-5). PWD ແມ່ນຕົວແປສະພາບແວດລ້ອມທີ່ເປັນຕົວແທນຂອງໄດເລກະທໍລີປັດຈຸບັນຂອງທ່ານແລະ ນຳ ໜ້າ ຕົວປ່ຽນນີ້ກັບ lambda: ສ້າງ ໜ້າ ທີ່, ປະເມີນຜົນໃນແຕ່ລະຄັ້ງທີ່ ຄຳ ສັ່ງສະແດງ.

The ~/.marcel.py ຍັງສາມາດ ນຳ ເຂົ້າໂມດູນ Python. ຕົວຢ່າງ: ຖ້າທ່ານຕ້ອງການໃຊ້ຟັງຊັນຄະນິດສາດໃນ ຄຳ ສັ່ງຂອງທ່ານ:

from math import *

ເມື່ອທ່ານໄດ້ເຮັດສິ່ງນີ້ແລ້ວ, ທ່ານສາມາດອ້າງອີງໃສ່ສັນຍາລັກຈາກໂມດູນນັ້ນ, ເຊັ່ນ: pi :

ໃຫ້ສັງເກດວ່າ pi ຖືກວົງເລັບ. ໂດຍທົ່ວໄປ, marcel ໃຊ້ວົງເລັບເພື່ອ ກຳ ນົດການສະແດງອອກຂອງ Python. ດັ່ງນັ້ນ (pi) ປະເມີນການສະແດງອອກຂອງ Python ທີ່ດຶງເອົາຄ່າຂອງຕົວແປ pi. ທ່ານຍັງສາມາດເຂົ້າຫາຕົວແປສິ່ງແວດລ້ອມແບບດັ້ງເດີມດ້ວຍວິທີນີ້, ເຊັ່ນ: (USER) ແລະ (HOME), ຫຼື ສຳ ນວນ Python ທີ່ຖືກຕ້ອງໂດຍອີງໃສ່ສັນຍາລັກໃນ namespace ຂອງ marcel

ແລະແນ່ນອນທ່ານສາມາດ ກຳ ນົດສັນຍາລັກຂອງຕົວເອງໄດ້. ຍົກຕົວຢ່າງ, ຖ້າທ່ານໃສ່ ຄຳ ນິຍາມ ຕຳ ແໜ່ງ ນີ້ໄວ້ໃນ ~/.marcel.py :

def factorial(n):
    f = 1
    for i in range(1, n + 1):
        f *= i
    return f

ຫຼັງຈາກນັ້ນທ່ານສາມາດໃຊ້ຟັງຊັນຄວາມຈິງໃນເສັ້ນ ຄຳ ສັ່ງ, ເຊັ່ນ:

ຕົວຢ່າງ Marcel Shell

ນີ້, ພວກເຮົາຈະຮຽນຮູ້ບາງຕົວຢ່າງຂອງ ຄຳ ສັ່ງໃນຫອຍນາງລົມ.

ສຳ ຫຼວດບັນທຶກໄດເລກະທໍລີປະຈຸບັນ, ເກັບຄືນເອກະສານຕາມການຂະຫຍາຍຂອງພວກເຂົາ (ເຊັ່ນ: ລະຫັດ .txt , .py ແລະອື່ນໆ), ແລະລວບລວມຂະ ໜາດ ເອກະສານທັງ ໝົດ ສຳ ລັບແຕ່ລະກຸ່ມ.

ທ່ານສາມາດເຮັດສິ່ງນີ້ໄດ້ໃນແບບດັ່ງຕໍ່ໄປນີ້:

ຜູ້ປະຕິບັດການ ls ຜະລິດກະແສຂອງວັດຖຸ File, (<ລະຫັດຜ່ານ -fr ໝາຍ ຄວາມວ່າການເຂົ້າເບິ່ງບັນດາລາຍຊື່ຂອງການກັບຄືນມາ, ແລະສົ່ງຄືນພຽງແຕ່ແຟ້ມເອກະສານ).

ວັດຖຸ File ຖືກສົ່ງໄປຫາ ຄຳ ສັ່ງຕໍ່ໄປ, ແຜນທີ່. ແຜນທີ່ໄດ້ ກຳ ນົດການເຮັດວຽກຂອງ Python, ໃນວົງເລັບຂ້າງນອກ, ເຊິ່ງມີແຜນທີ່ແຕ່ລະເອກະສານໄປຫາ tuple ທີ່ມີສ່ວນຂະຫຍາຍຂອງເອກະສານ, ແລະຂະ ໜາດ ຂອງມັນ. (Marcel ອະນຸຍາດໃຫ້ຍົກເວັ້ນ ຄຳ ສຳ ຄັນຂອງ lambda.)

ຜູ້ປະຕິບັດງານ (ຫຼຸດຜ່ອນ) ສີແດງ, ກຸ່ມໂດຍສ່ວນ ທຳ ອິດຂອງ tuple (ສ່ວນຂະຫຍາຍ) ແລະຈາກນັ້ນສະຫຼຸບຂະ ໜາດ ຕ່າງໆພາຍໃນແຕ່ລະກຸ່ມ. ຜົນໄດ້ຮັບແມ່ນຈັດຮຽງຕາມການຂະຫຍາຍ.

ທໍ່ອາດມີສ່ວນປະສົມຂອງຜູ້ປະຕິບັດງານ marcel ແລະຜູ້ປະຕິບັດງານ host. ວັດຖຸປະຕິບັດການທໍ່, ແຕ່ຢູ່ຂອບເຂດຂອງຜູ້ປະຕິບັດງານ/ຂອບເຂດທີ່ສາມາດປະຕິບັດໄດ້, ສາຍທໍ່ marcel ແທນ

ຕົວຢ່າງ, ຄຳ ສັ່ງນີ້ລວມຕົວຜູ້ປະຕິບັດງານແລະສາມາດປະຕິບັດງານໄດ້ແລະລາຍຊື່ຜູ້ໃຊ້ຂອງຜູ້ໃຊ້ທີ່ແກະແມ່ນ /bin/bash .

$ cat /etc/passwd \
| map (line: line.split(':')) \
| select (*line: line[-1] == '/bin/bash') \
| map (*line: line[0]) \
| xargs echo

cat ແມ່ນ Linux ທີ່ສາມາດປະຕິບັດໄດ້. ມັນອ່ານ/etc/passwd, ແລະທໍ່ນ້ ຳ ເນື້ອໃນຂອງມັນຢູ່ລຸ່ມລົງໄປໃນແຜນທີ່ຂອງຜູ້ປະກອບການ.

ການໂຕ້ຖຽງວົງເລັບໃນການສ້າງແຜນທີ່ແມ່ນ ໜ້າ ທີ່ຂອງ Python ທີ່ແຍກເສັ້ນທີ່ : ແຍກ, ໃຫ້ຜົນຕອບແທນ 7-tuples. ຕົວເລືອກແມ່ນຜູ້ປະຕິບັດງານ marcel ເຊິ່ງການໂຕ້ຖຽງຂອງມັນແມ່ນຟັງຊັນ Python ທີ່ ກຳ ນົດບັນດາ tuples ທີ່ພາກສະ ໜາມ ສຸດທ້າຍແມ່ນ/bin/bash.

ຜູ້ປະຕິບັດການຕໍ່ໄປ, ແຜນທີ່ອື່ນຈະຮັກສາຊື່ຜູ້ໃຊ້ຂອງແຕ່ລະບ່ອນທີ່ໃສ່. ສຸດທ້າຍ, xargs echo ລວມຊື່ຜູ້ໃຊ້ເຂົ້າມາເປັນແຖວດຽວ, ເຊິ່ງຖືກພິມອອກເປັນ stdout.

ຂຽນໃນ Marcel Shell

ໃນຂະນະທີ່ Python ບາງຄັ້ງກໍ່ຖືວ່າເປັນພາສາຂຽນ, ມັນບໍ່ໄດ້ຜົນດີ ສຳ ລັບຈຸດປະສົງນັ້ນ. ບັນຫາແມ່ນວ່າການແລ່ນ ຄຳ ສັ່ງ shell, ແລະຜູ້ບໍລິຫານອື່ນໆຈາກ Python ແມ່ນຫຍຸ້ງຍາກ. ທ່ານສາມາດໃຊ້ os.system() , ເຊິ່ງງ່າຍດາຍແຕ່ມັກຈະບໍ່ພຽງພໍໃນການຈັດການກັບ stdin, stdout, ແລະ stderr. subprocess.Popen() ແມ່ນມີປະສິດທິພາບຫຼາຍແຕ່ສັບສົນກວ່າທີ່ຈະໃຊ້.

ວິທີການຂອງ Marcel ແມ່ນການສະ ໜອງ ໂມດູນທີ່ລວມເອົາຜູ້ປະກອບການ marcel ກັບລັກສະນະພາສາຂອງ Python. ເພື່ອເບິ່ງຕົວຢ່າງກ່ອນ ໜ້າ ນີ້, ນີ້ແມ່ນລະຫັດ Python ສຳ ລັບການ ຄຳ ນວນຜົນລວມຂອງຂະ ໜາດ ໄຟລ໌ໂດຍການຂະຫຍາຍ:

from marcel.api import *

for ext, size in (ls(file=True, recursive=True)
                  | map(lambda f: (f.suffix, f.size))
                  | red('.', '+')):
    print(f'{ext}: {size})

ຄຳ ສັ່ງຂອງຫອຍແມ່ນຄືກັນກັບແຕ່ກ່ອນ, ຍົກເວັ້ນສົນທິສັນຍາສັງເຄາະ. ດັ່ງນັ້ນ ls -fr ປ່ຽນເປັນ ls (file = True, recursive = True). ຜູ້ໃຫ້ບໍລິການແຜນທີ່ແລະສີແດງກໍ່ມີເຊັ່ນດຽວກັນ, ເຊື່ອມຕໍ່ກັບທໍ່, ຄືກັນກັບຮຸ່ນຫອຍ ຄຳ ສັ່ງຂອງແກະທັງ ໝົດ (ls … red) ໃຫ້ມັນເປັນຕົວແກ້ໄຂ Python ເພື່ອໃຫ້ ຄຳ ສັ່ງນັ້ນສາມາດໃຊ້ກັບ Python ໄດ້.

ການເຂົ້າເຖິງຖານຂໍ້ມູນກັບ Marcel Shell

ທ່ານສາມາດເຊື່ອມໂຍງການເຂົ້າເຖິງຖານຂໍ້ມູນກັບທໍ່ສົ່ງ. ກ່ອນອື່ນ ໝົດ, ທ່ານ ຈຳ ເປັນຕ້ອງ ກຳ ຫນົດຄ່າການເຂົ້າເຖິງຖານຂໍ້ມູນໃນແຟ້ມ config, ~/.marcel.py , ເຊັ່ນ:

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

DB_DEFAULT = 'jao'

ນີ້ ກຳ ນົດການເຂົ້າເຖິງຖານຂໍ້ມູນຂອງ Postgres ທີ່ມີຊື່ວ່າ acme, ໂດຍໃຊ້ psycopg2 driver. ການເຊື່ອມຕໍ່ຈາກ marcel ຈະຖືກສ້າງຂື້ນໂດຍໃຊ້ຜູ້ໃຊ້ jao, ແລະຂໍ້ມູນຖານຂໍ້ມູນແມ່ນຊື່ວ່າ jao. (DB_DEFAULT ລະບຸຂໍ້ມູນກ່ຽວກັບຖານຂໍ້ມູນ jao ວ່າເປັນຂໍ້ມູນທີ່ຈະຕ້ອງໃຊ້ຖ້າບໍ່ມີຂໍ້ມູນລະບຸ.) ດ້ວຍການຕັ້ງຄ່ານີ້, ຖານຂໍ້ມູນສາມາດສອບຖາມໄດ້ໂດຍໃຊ້ຕົວປະຕິບັດການ sql, ເຊັ່ນ:

sql 'select part_name, quantity from part where quantity < 10' \
| out --csv –-file ~/reorder.csv

ຄຳ ສັ່ງນີ້ຈະສອບຖາມຕາຕະລາງທີ່ມີຊື່ສ່ວນ ໜຶ່ງ, ແລະຖີ້ມຜົນການສອບຖາມເຂົ້າໃນແຟ້ມ ~/reorder.csv , ໃນຮູບແບບ CSV.

ການເຂົ້າເຖິງໄລຍະໄກກັບ Marcel Shell

ຄ້າຍຄືກັນກັບການເຂົ້າເຖິງຖານຂໍ້ມູນ, ການເຂົ້າເຖິງຫ່າງໄກສອກຫຼີກສາມາດຕັ້ງຄ່າໄດ້ໃນ ~/.marcel.py . ຍົກຕົວຢ່າງ, ນີ້ ກຳ ນົດກຸ່ມ 4 ໂຫນດ:

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

ກຸ່ມສາມາດຖືກລະບຸວ່າເປັນຫ້ອງທົດລອງໃນ ຄຳ ສັ່ງ marcel. ຕົວກໍານົດການຂອງຜູ້ໃຊ້ແລະຕົວຕົນລະບຸຂໍ້ມູນເຂົ້າສູ່ລະບົບ, ແລະຕົວກໍານົດການໂຮດລະບຸທີ່ຢູ່ IP ຂອງຂໍ້ທີ່ຢູ່ເທິງກຸ່ມ.

ເມື່ອກຸ່ມໄດ້ຖືກ ກຳ ນົດແລ້ວ, ທຸກໆຂໍ້ສາມາດເຮັດວຽກໄດ້ໃນເວລາດຽວກັນ. ຕົວຢ່າງ, ເພື່ອໃຫ້ໄດ້ບັນຊີຂອງ pids ຂະບວນການແລະສາຍບັນຊາໃນທົ່ວກຸ່ມ:

@lab [ps | map (proc: (proc.pid, proc.commandline))]

ນີ້ຈະສົ່ງຄືນກະແສ (IP address, PID, line command) tuple.

ສຳ ລັບຂໍ້ມູນເພີ່ມເຕີມເຂົ້າເບິ່ງທີ່:

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

Marcel ແມ່ນ ໃໝ່ ງາມແລະຢູ່ພາຍໃຕ້ການພັດທະນາຢ່າງຫ້າວຫັນ. ຕິດຕໍ່ພົວພັນຖ້າທ່ານຕ້ອງການຄວາມຊ່ວຍເຫຼືອ.