Skip to main content

Paste and run commands from bash, zsh, fish, tcsh, pwsh, cmd in xonsh shell.

Project description

Paste and run commands from bash, fish, zsh, tcsh in xonsh shell.

If you like the idea click ⭐ on the repo and and tweet.

Install

xpip install -U xontrib-sh
echo 'xontrib load sh' >> ~/.xonshrc
# Reload xonsh

Usage

Start the line with ! (exclamation mark with space) then paste the sh-compatible commands after it and run. The commands syntax will be tested in the shells from list (if installed) and the commands will be run in the first matching shell. By default list of shells contains bash and sh.

The commands will be executed in the environment that will be inherited from current but if the commands modify the environment there will no changes in source xonsh environment.

To set the list of shells use environment variable before loading the xontrib:

$XONTRIB_SH_SHELLS = ['bash', 'sh']  # default
xontrib load sh
! echo hello

Also you can set the shell explicitly i.e. !bash or !b (the first letter of the shell).

The main use case

The main use case of xontrib-sh is when you copy and paste the sh-commands from some article or instruction and this commands are environment agnostic and you want to run it without rewriting it on xonsh or run sh-shell.

For example you've found snippet of bash commands that check existing of curl:

TMP=/tmp && cd $TMP && ( [[ -x $(command -v curl) ]] && echo "Yes" || echo "No" )  

You hesitate how xonsh will execute this and you're absolutely right there will be syntax error. To run this just start with ! or !b or !bash and paste the commands. As result you'll see the right message.

Examples

Bash brace expansion

! echo 01.{05..10}
# Or explicitly:
!b echo 01.{05..10}
!bash echo 01.{05..10}
bash:
01.05 01.06 01.07 01.08 01.09 01.10

Multiline loop

! for i in 1 2 3
do
   echo $i
done
bash:
1
2
3

Use environment variables to pass values from xonsh to sh

$ENV = 'hello'
! echo $ENV!
bash:
hello!

Known issues

Determining the shell on short command

In case of usage many different shells the detection of the shell works perfect when the commands contain shell-specific syntax. But if you run the short command that could be valid in all shells the first matched shell will be chosen but it's could be wrong.

For example you have bash and fish in the list of shells. The short fish command may be determined as bash command. As result the command will be failed:

$XONTRIB_SH_SHELLS = ['bash', 'fish']
xontrib load sh
# Run fish command:
! set -U var1 value1
# bash: line 0: set: -U: invalid option

To avoid this use the explicit setting the shell i.e. !fish set -U var1 value1.

Also, since pwsh and cmd shells don't have an option to detect their own syntax, they can only be invoked:

  • explicitly by their name, i.e. !p or !pwsh
  • implicitly via the ! prefix only when there is one shell in $XONTRIB_SH_SHELLS

Why it's better than xonsh subprocess macros?

Xonsh subprocess macros is not supporting multiline commands and require more keystrokes.

Additional options

  • $XONTRIB_SH_USEFULL (default True) - enables to set the shell explicitly by the name of the shell i.e. !bash .
  • $XONTRIB_SH_USEFIRST (default True) - enables to set the shell explicitly by the first letter i.e. !b instead of !bash .

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

xontrib_sh-0.3.1.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

xontrib_sh-0.3.1-py3-none-any.whl (5.3 kB view details)

Uploaded Python 3

File details

Details for the file xontrib_sh-0.3.1.tar.gz.

File metadata

  • Download URL: xontrib_sh-0.3.1.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for xontrib_sh-0.3.1.tar.gz
Algorithm Hash digest
SHA256 a88aff54a09d71206bb73ff8b6da715768bfe03f6dde1c350f402ecc603d0cc9
MD5 2693baa7a493490429ca4f330771f330
BLAKE2b-256 2d1a5f28e30d47e95d2e430d7fd45e55fe3884c027f2461b28ba0d85dc3a2ad2

See more details on using hashes here.

File details

Details for the file xontrib_sh-0.3.1-py3-none-any.whl.

File metadata

  • Download URL: xontrib_sh-0.3.1-py3-none-any.whl
  • Upload date:
  • Size: 5.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.12.2

File hashes

Hashes for xontrib_sh-0.3.1-py3-none-any.whl
Algorithm Hash digest
SHA256 4eb6d7bc8121806fe705bb6bbb6bfef5f47990c0141c5e14bdde55a05647fc20
MD5 6edb455aa619df626aa92ab760775f51
BLAKE2b-256 518392a2d8949844f5a3dbad86aa6209667d2891efe737b70e5be88e0f5056d1

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page