Xonsh - командная оболочка, сочетающая Python с лучшими возможностями Bash, zsh и fish
В рамках проекта xonsh развивается интерактивная командная оболочка, предоставляющая возможность выполнения сценариев на языке Python и предлагающая интерфейс командной строки, заимствующий лучшие черты таких оболочек как bash, zsh, fish и IPython. Язык сценариев является подмножеством языка Python 3.4, расширенный дополнительными примитивами традиционных оболочек. Код написан на языке Python и распространяется под лицензией BSD. Поддерживается работа в Linux, Windows и OS X.
Xonsh позиционируется как оболочка общего назначения, пригодная для повседневного использования. Поддерживаются такие возможности работы в командной строке, как автодополнение ввода клавишей табуляции, навигация по истории выполнения операций, подсветка синтаксиса, автоматическое формирование контекстных уточнений (suggestion), определение псевдонимов и т.п. Для расширения функциональности могут подключаться расширения.
При работе в xonsh в командной строке доступны типовые библиотеки функций Python, например, можно использовать регулярные выражения при выборке файлов, манипулировать контентом в формате JSON, выполнять математические действия, вызывать функции библиотек pandas, NLTK и numpy в процессе проведения научных исследований. При этом, в отличие от IPython, выполнение команд не требует использования отдельного префикса. Разбор ввода производится в привязке к контексту, например, ввод "ls -l" может быть трактован как вызов команды ls с аргументом "-l", но если определены переменные "ls" и "l", то выражение будет трактоваться как "ls минус l". Также можно явно использовать режим Python и режим подкомманд (к в обычном shell). Дополнительно предлагается собственный менеджер виртуальных Python-окружений Vox, позволяющий одновременно работать в нескольких изолированных пространствах имён.
Отдельного внимания заслуживают средства по работе с историей операций, которые построены с использованием асинхронной модели, охватывающей сразу все активные сеансы, а не только текущий терминал. При желании можно сохранять в истории не только пользовательский ввод, но и результаты выполнения операций и формируемый командами вывод. Например, спустя какое-то время после получения сообщения об ошибке, можно вернуться для повторного просмотра текста ошибки и кода возврата, или сравнить вывод при запуске программы с разными аргументами. Более того, имеется возможность повторно проиграть набор сохранённых в истории команд. История сохраняется в форме коллекции файлов в формате JSON.