XmyShell
XmyShell is a shell-like tool built on top of prompt_toolkit which provides a persistent Python runtime. The main process is Python, and shell commands are executed in subprocesses. It provides a persistent Python namespace, inline Python evaluation, and command output capture. It can be useful if you want Python evaluation in a shell or execute shell command conveniently in Python REPL environment.
Get started
Installation
pip install xmyshell
Start
$ xmyshell
XmyShell 0.1.0
Initialized with 296ms.
Username@hostname ➜ ~ 0ms
❯
Learn more through help.
❯ help
Features
Command Line Features
- Persistent Python namespace across commands (variables, imports, functions)
- Expand inline Python expressions within
{}, using independent namespace.
❯ mkdir {" ".join(f"test{i}" for i in range(10))}
❯ ls
test0 test1 test2 test3 test4 test5 test6 test7 test8 test9
- Evaluate and print Python expressions with
print
❯ print 1 + 1
2
- Execute Python statements with
pyexec
❯ pyexec files = [f for f in os.listdir('.') if f.endswith('.py')]
❯ print len(files)
3
- Capture command output into a Python variable with
=>.
❯ which python => path
❯ print path
/usr/bin/python
❯ cd {dirname(path)}
❯ pwd
/usr/bin
- Redirect the output of Python commands (
print,pyexec) with|>
❯ print "\n".join(str(i) for i in range(100)) |> grep 42 => result
❯ print result
42
- Built-in
sourcecommand to run python scripts.
❯ which python
/usr/bin/python
❯ source .venv/bin/activate_this.py
❯ which python
/tmp/test/.venv/bin/python
- Built-in
exportcommand.
❯ pyexec foo = "foo"
❯ export ENV_VAR={foo}bar
❯ print ENV_VAR
foobar
- Built-in
importcommand.
❯ import numpy as np
❯ from math import *
- Reload with
reloadcommand.
❯ reload
- Update xmyshell (optionally to a specific version).
❯ udpate
or
❯ update 0.1.3
- Alias
❯ alias ll='ls -lh'
❯ unalias ll
- Syntax highlighting via
prompt_toolkit - Powerful auto-completion, history search, and automatic bracket/quote pairing
- Startup configuration:
~/.xmyshell/config.pyloaded at launch - Cross-platform (Windows, Linux, macOS)
Built-in Helper Functions
-
getlogin()Returns the current username. -
getcwd()Returns the absolute path of the current working directory. -
dirname(path)Returns the parent directory of a path. -
basename(path)Returns the final component of a path. -
cat(file)Shortcut foropen(file).read(). -
alias(altname, target)Same as the command. -
unalias(altname)Same as the command.
Reserved global varibles
-
exit_codeThe exit code of the last command. -
exec_durationThe duration which last command took. -
HOME_DIRThe home directory, similar to~. -
PROFILEThe path of config file.
Keyboard Shortcuts
↑↓-> Navigate through command history.→-> Apply selected history entry to the prompt.Ctrl+R-> Reverse incremental searching (history).Ctrl+Z-> Undo.Ctrl+Y-> Redo.Ctrl+D-> Exit XmyShell.- Auto bracket/parenthesis/quote pairing
Limitations
XmyShell is Python‑first. This brings power, but also intentional trade‑offs.
-
No
sourcefor shell scripts —sourceexecutes Python files viarunpy.run_path(). Shell scripts (e.g.,venv/bin/activate) won't work; useactivate_this.pyinstead. -
No
deactivate— This is a shell function, not a real command. Virtual environments can be deactivated by reloading environment (reload) or manually restarting a session. -
Shell scripts cannot modify the current environment — Every external command runs in a fresh subprocess;
cd,export, aliases, and function definitions inside a script are lost on exit. -
No pipelines between built‑in commands —
printandpyexecdo not support|. Use Python variables to pass data. -
External command overhead — Each subprocess spawns with minor delays.
Why? XmyShell is NOT a Bash replacement. It's a Python‑native environment for those who want Python's power at the command line.
Release files for xmyshell 0.2.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| xmyshell-0.2.7.tar.gz | 48.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| xmyshell-0.2.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 97.6 kB
Release files / xmyshell-0.2.7.tar.gz
| Download URL | xmyshell-0.2.7.tar.gz |
|---|---|
| Size | 48.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
87044099307c10d2367d4caef174431cbcfad589a185db09d92a12382c75ffe6
|
|
BLAKE2b-256 checksum How to use checksums |
8d9b8fd2d0f1a04a9c51d725af9a66509b16ef42cbf5614764b58c8beb384c12
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.5
|
Release files / xmyshell-0.2.7-py3-none-any.whl
| Download URL | xmyshell-0.2.7-py3-none-any.whl |
|---|---|
| Size | 49.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
1ff1e2af9f37213395cbb6240a01a49fbb0226c1b3106a05b2f96f112ecf0c4a
|
|
BLAKE2b-256 checksum How to use checksums |
f9c077fc80acd208d70401f4a95eff29352fa67a01d2976761cf2d1bbfab7eb6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.5
|