Як можна замінити bash на Python?


13

Відповідно до прийнятої відповіді на це питання ТА: Python може зробити чудову заміну .

Моє запитання тоді таке: як я можу зробити плавний перемикач? Я думаю, що головне, щоб розібратися, щоб зробити такий перемикач, було б: коли запускаєте віртуальний термінал, зателефонуйте до якоїсь оболонки Python (що хоч?), А не чогось типу оболонки Bourne.

Чи має це сенс? Якщо так, то як я можу робити це? Це порівняння звичайних оболонок у Вікіпедії не містить жодної оболонки Python: Порівняння командних оболонок

Відповіді:


16

Цей потік і його прийнята відповідь, зокрема, стосуються використання Python для сценаріїв оболонок , а не як інтерактивної оболонки.

Щоб писати сценарії іншою мовою, поставте, наприклад, #!/usr/bin/env pythonзамість #!/bin/bashверхньої частини сценарію.

Якщо ви хочете спробувати іншу інтерактивну оболонку, просто запустіть її, наприклад, введіть ipythonу вашому наявному рядку оболонки. Якщо ви вирішили прийняти цю оболонку, встановіть SHELLзмінну середовища на початку сеансу ( ~/.profileу більшості середовищ або в ~/.pam_environment), наприклад export SHELL=/usr/bin/ipython( .profileсинтаксис) або SHELL="/usr/bin/ipython"(.pam_environment синтаксис).

Жодна з оболонок, які я бачив на основі передових мов, таких як Perl чи Python, на мій погляд, недостатньо хороша для інтерактивного використання. Вони занадто багатослівні для загальних завдань, особливо спільної роботи оболонки, яка полягає у запуску програми. Я писав про подібну тему 4 роки тому ; Я не думаю, що ситуація кардинально покращилася відтоді.


14

Я знаю, що це питання вже досить давнє, але є нова оболонка на основі суперсети Python 3 під назвою xonsh, яка може бути тим, що ви шукаєте.

з веб-сайту:

Xonsh - це мова оболонки і командний рядок, що шукає BASHwards, і виглядає на BASHwards. Мова - це набір Python 3.4+ із додатковими примітивами оболонки, до яких ви звикли з Bash та IPython. Він працює у всіх основних системах, включаючи Linux, Mac OSX та Windows. Xonsh призначений для щоденного використання як експертів, так і новачків.

Дивіться це на xon.sh


2

Швидше ні

Причина в тому, що Python не має підтримки для боротьби з підвищеними привілеями. Найгірший випадок - з редагуванням системних файлів.

Порівняйте

sudo sed -i -e "/\#LXC_DOMAIN/ s/\#//" /etc/default/lxc-net

з:

out = subprocess.run('''sudo sed -i -e "/\#LXC_DOMAIN/ s/\#//" /etc/default/lxc-net''', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT,env={"PATH": "/usr/bin"})

Ви не можете використовувати натиснуту обробку файлів Python для системних файлів, оскільки Python по суті не в змозі виконувати підкоманди з підвищеними привілеями.


1
Я не впевнений, чому судо гірше за все. Якщо вам потрібен sudo, вам потрібно запустити / usr / bin / sudo, що є програмою, як і будь-яка інша. Ваш конкретний приклад тут демонструє труднощі сприйняття ментальної оболонки та використання її від Python; кращий спосіб може бути можливим, але це буде менш прямий переклад.
rosuav

1

Іпітон добре. Також подивіться бібліотеку "os".


Ви маєте рацію, IPython повинен був бути очевидним вибором ... але як мені змусити IPython запускатись безпосередньо в емуляторі термінала або всередині фактичного терміналу?
user89

Команда: chfn -s $ (що ipython)
user400344

Це вийшло здивованим ... Просто: chfn -s $ (який ipython) ... Переконайтесь, що повний шлях до ipython знаходиться в / etc / shell.
user400344

інший варіант - це exec ipythonз поточного файлу запуску оболонки, наприклад.bashrc
ptman
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.