It's kinda like Bash except it causes severe brain damage because it's actually a Python REPL.
Project description
Concussion Shell
It's kinda like Bash except it causes severe brain damage because it's actually a Python REPL.
Usage
$ pip install concussion
$ concussion
>>> cat + "README.md" | head + "-n" + "5"
# Concussion Shell
It's kinda like Bash except it causes severe brain damage because it's actually
a Python REPL.
How it works
Everything is implemented using horrific operator overloads.
Since the commands can't be executed while they're being constructed, commands
are instead executed when stringified using repr()
, which works nicely with
Python's interactive console.
Python doesn't support building commands from adjacent identifiers, so
Concussion uses the +
operator to join arguments for a command.
>>> echo + "hello" + "world"
hello world
You can pipe commands using the standard |
pipe operator.
>>> ls + "-l" | less
# less is broken because I can't be bothered to make my shell look like a TTY
# so the output is incorrect
To create shell aliases, you simply use Python variable assignments
>>> # This makes for an epic prank
>>> bash = concussion
>>> bash
Concussion shell...
Because &&
and ||
are not supported in Python, use the and
and or
keywords instead.
>>> false or echo + "hi"
>>> false and echo + "hi"
hi
>>> true or echo + "hi"
hi
>>> true and echo + "hi"
You can also do file redirection like in Bash
>>> echo + "hi" > "hi.txt"
>>> cat < "hi.txt"
hi
>>> echo + "hi again" >> "hi.txt" # append
>>> cat < "hi.txt"
hi
hi again
Since there is no way to create a Python identifier for every possible
executable that could be run, users can also type their own shell prompt:
Ṩ +
. Note that this isn't a dollar sign, but is rather a Latin capital
letter S with dot below and dot above (U+1E68
), since that is the closest
valid Python identifier I could get to the traditional $
dollar sign. Since
Ṩ
is difficult to type, S
is also available as a substitute.
>>> Ṩ + "uname"
Linux
Because of Python's order of operations, you need to group arguments for
commands within a tuple
or list
for everything after the first command
in a pipeline if the first argument isn't a variable.
>>> cat + "README.md" | ("head", "-n", "5")
# Concussion Shell
It's kinda like Bash except it causes severe brain damage because it's actually
a Python REPL.
Known issues
-
Currently all stderr goes directly to this process's stderr, and it cannot be redirected. Maybe I'll implement this at some point.
-
Currently no support for executing tasks asynchronously. Perhaps I could use
β
to signify this since it looks kinda like an&
but is a valid identifier. -
Pipes break frequently. I think there's a bug somewhere in the code for handling this but I don't know what.
-
Many programs don't work nicely because they think they're not running in a terminal.
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
Built Distribution
Hashes for concussion-0.1.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8dc68c8421db1bd340ea4c6fac985c07b3f67f066b61e5ce6b0d6732ad70d709 |
|
MD5 | 8accbb8cd9216b23c62089b677afbf5e |
|
BLAKE2b-256 | 82a8cf2304da42c2414900249ff5052005e237c45b7d3d25b601d54c0354aa47 |