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

13

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

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

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

user89
источник

Ответы:

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'.

user400344
источник
Вы правы, IPython должен был быть очевидным выбором ... но как мне заставить IPython автоматически запускаться внутри эмулятора терминала или внутри реального терминала?
user89
Команда: chfn -s $ (который ipython)
user400344
Это получилось искажено ... Просто: chfn -s $ (который ipython) ... Убедитесь, что полный путь к ipython находится в / etc / shells.
user400344 27.12.14
другой вариант - exec ipythonиз текущего файла запуска оболочки, например,.bashrc
ptman