Linux Guide

Installation

You can install xonsh using conda, pip, or from source.

conda:

$ conda install -c conda-forge xonsh

Note

For the bleeding edge development version use conda install -c xonsh/channel/dev xonsh

pip:

$ pip install xonsh

source: Download the source from github (zip file), then run the following from the source directory,

$ python setup.py install

Arch Linux users can install xonsh from the Arch User Repository with e.g. yaourt, aura, pacaur, PKGBUILD, etc...:

yaourt:

$ yaourt -Sa xonsh      # yaourt will call sudo when needed

aura:

$ sudo aura -A xonsh

pacaur:

$ pacaur -S xonsh

If you run into any problems, please let us know!

Additional Setup

If you want to use xonsh as your default shell, you will first have to add xonsh to /etc/shells.

First ensure that xonsh is on your $PATH

$ which xonsh

Then, as root, add xonsh to the shell list

# echo $(which xonsh) >> /etc/shells

To change shells, run

$ chsh -s $(which xonsh)

You will have to log out and log back in before the changes take effect.

Dependencies

Xonsh currently has the following external dependencies,

Run Time:

  1. Python v3.4+
  2. PLY (optional, included with xonsh)
  3. prompt-toolkit (optional)
  4. Jupyter (optional)
  5. setproctitle (optional)
  6. distro (optional)

Documentation:

  1. Sphinx (which uses reStructuredText)
  2. Numpydoc
  3. Cloud Sphinx Theme

Possible conflicts with Bash

Depending on how your installation of Bash is configured, Xonsh may have trouble loading certain shell modules. Particularly if you see errors similar to this when launching Xonsh:

bash: module: line 1: syntax error: unexpected end of file
bash: error importing function definition for `BASH_FUNC_module'
bash: scl: line 1: syntax error: unexpected end of file
bash: error importing function definition for `BASH_FUNC_scl'
bash: module: line 1: syntax error: unexpected end of file
bash: error importing function definition for `BASH_FUNC_module'
bash: scl: line 1: syntax error: unexpected end of file
bash: error importing function definition for `BASH_FUNC_scl'

...You can correct the problem by unsetting the modules, by adding the following lines to your ~/.bashrc file:

unset module
unset scl

Default Ubuntu .bashrc breaks Foreign Shell Functions

Xonsh supports importing functions from foreign shells using the ForeignShellFunctionAlias class, which calls functions as if they were aliases. This is implemented by executing a command that sources the file containing the function definition and then immediately calls the function with any necessary arguments.

The default user ~/.bashrc file in Ubuntu 15.10 has the following snippet at the top, which causes the script to exit immediately if not run interactively.

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

This means that any function you have added to the file after this point will be registered as a xonsh alias but will fail on execution. Previous versions of Ubuntu have a different test for interactivity at the top of the file that yields the same problem.