Bash to Xonsh Translation Guide

As you have probably figured out by now, xonsh is not sh-lang compliant. If your muscles have memorized all of the Bash prestidigitations, this page will help you put a finger on how to do the equivalent task in xonsh.

For shell scripts, the recommended file extension is xsh, and shebang line is #!/usr/bin/env xonsh.

Bash

Xonsh

Notes

$NAME or ${NAME}

$NAME

Look up an environment variable by name.

export NAME=Peter

$NAME = 'Peter'

Setting an environment variable.

unset NAME

del $NAME

Unsetting/deleting an environment variable.

echo "$HOME/hello"

echo "$HOME/hello"

Construct an argument using an environment variable.

something/$SOME_VAR/$(some_command)

@('something/' + $SOME_VAR + $(some_command).strip())

Concatenate a variable or text with the result of running a command.

${!VAR}

${var or expr}

Look up an environment variable via another variable name. In xonsh, this may be any valid expression.

$(cmd args) or `cmd args`

@$(cmd args)

Command substitution (allow the output of a command to replace the command itself). Tokenizes and executes the output of a subprocess command as another subprocess.

set -e

$RAISE_SUBPROC_ERROR = True

Cause a failure after a non-zero return code. Xonsh will raise a supbrocess.CalledProcessError.

set -x

trace on

Turns on tracing of source code lines during execution.

&&

and or &&

Logical-and operator for subprocesses.

||

or as well as ||

Logical-or operator for subprocesses.

$?

_.rtn

Returns the exit code, or status, of the previous command.

N=V command

with ${...}.swap(N=V): command

Set temporary environment variable(s) and execute for command. Use an indented block to execute many commands in the same context.

!$

__xonsh__.history[-1, -1]

Get the last argument of the last command

$<n>

$ARG<n>

Command line argument at index n, so $ARG1 is the equivalent of $1.

$@

$ARGS

List of all command line argument and parameter strings.