Как я могу заменить bash на Python?


13

Согласно принятому ответу на этот вопрос: Python может сделать отличную замену bash .

Тогда у меня такой вопрос: как мне сделать плавный переход? Я думаю, что главное, что нужно сделать для такого переключения: при запуске виртуального терминала вызывать какую-нибудь оболочку Python (что, хотя?), А не что-то вроде оболочки Bourne.

Имеет ли это смысл? Если да, как я могу это сделать? Это сравнение обычных оболочек в Википедии не содержит ни одной оболочки Python: Сравнение командных оболочек

Ответы:


15

Этот поток и его принятый ответ, в частности, касаются использования 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. Язык представляет собой расширенный набор 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 хуже всего остального. Если вам нужен sudo, вам нужно запустить / usr / bin / sudo, которая, как и любая другая, является программой. Ваш конкретный пример демонстрирует, как трудно взять менталитет оболочки и использовать его из Python; лучший способ может быть возможен, но это будет менее прямой перевод.
Розуав

1

Ipython в порядке. Также посмотрите на библиотеку 'os'.


Вы правы, IPython должен был быть очевидным выбором ... но как мне заставить IPython автоматически запускаться внутри эмулятора терминала или внутри реального терминала?
user89

Команда: chfn -s $ (который ipython)
user400344

Это получилось искажено ... Просто: chfn -s $ (который ipython) ... Убедитесь, что полный путь к ipython находится в / etc / shells.
user400344 27.12.14

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